fork download
  1. #include <iostream>
  2. #include <string>
  3. #include <sstream>
  4. #include <string>
  5.  
  6. using namespace std;
  7.  
  8. string konwersjaIntNaString(int liczba)
  9. {
  10. ostringstream ss;
  11. ss << liczba;
  12. string str = ss.str();
  13. return str;
  14. }
  15. int obliczWystapieniaWybranegoZnaku(string wyraz, int pozycjaZnaku)
  16. {
  17. int iloscWystapien = 1;
  18. if(wyraz.length()>pozycjaZnaku)
  19. {
  20. while(wyraz[pozycjaZnaku] == wyraz[pozycjaZnaku+1])
  21. {
  22. iloscWystapien++;
  23. pozycjaZnaku++;
  24. }
  25. }
  26. else
  27. iloscWystapien = 0;
  28. return iloscWystapien;
  29. }
  30.  
  31. string skracanieWyrazow(string wyrazDoSkrocenia)
  32. {
  33. int dlugosc = wyrazDoSkrocenia.length();
  34. int iloscWystapien;
  35. char powtarzajacySieZnak;
  36.  
  37. for(int i = 0; i < dlugosc - 2; i++)
  38. {
  39. //sprawdza czy wystepuja 3 takie same znaki po sobie
  40. if((wyrazDoSkrocenia[i] == wyrazDoSkrocenia[i+1])&&(wyrazDoSkrocenia[i+1] == wyrazDoSkrocenia[i+2]))
  41. {
  42. iloscWystapien = obliczWystapieniaWybranegoZnaku(wyrazDoSkrocenia,i);
  43. powtarzajacySieZnak = wyrazDoSkrocenia[i];
  44. wyrazDoSkrocenia.replace(i,iloscWystapien,powtarzajacySieZnak+konwersjaIntNaString(iloscWystapien));
  45. dlugosc = wyrazDoSkrocenia.length();
  46. }
  47. }
  48. return wyrazDoSkrocenia;
  49. }
  50. int main()
  51. {
  52. int iloscTestow;
  53. cin>>iloscTestow;
  54. string wyraz;
  55. for(int i = 0; i<iloscTestow;i++)
  56. {
  57. cin>>wyraz;
  58. cout<<skracanieWyrazow(wyraz)<<endl;
  59. }
  60.  
  61. cin>>iloscTestow;
  62.  
  63. return 0;
  64. }
  65.  
Success #stdin #stdout 0s 16072KB
stdin
Standard input is empty
stdout