fork download
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4.  
  5. using namespace std;
  6.  
  7. int ile;
  8.  
  9. int main()
  10. {
  11. cin >> ile;
  12.  
  13. /*string zestaw[ile];
  14. int dlugosc[ile];
  15. */
  16.  
  17. // Nie możesz tak tego zrobić. Takie zastosowanie to rozszerzenie kompilatora i jest niepszenośne. Lepiej używaj std::vector
  18. // a jeżeli jeszcze się nie zagłębiałeś w te szczegóły, to mogą być takze wskaźniki:
  19. // string * zestaw = new string[ile];
  20. // itd...
  21.  
  22.  
  23. vector<string> zestaw(ile); // poprawione
  24. vector<int> dlugosc(ile); // poprawione
  25.  
  26. for (int i = 0; ile>i; i++) // zamieniłbym warunek na: i < ile
  27. {
  28. cin >> zestaw[i];
  29. dlugosc[i] = zestaw[i].length();
  30. }
  31.  
  32. for (int i = 0; ile>i; i++) // zmieniłbym na: i < ile
  33. {
  34. string napis = zestaw[i];
  35. int liczba = 1;
  36.  
  37. //for (int j = 0; dlugosc[ile]>j; j++) // błąd -> wyjście poza zakres. Poprawiłem na dole.
  38. for (int j = 0; j < dlugosc[i]; j++)
  39. {
  40. if (napis[j] == napis[j + 1])
  41. {
  42. liczba++;
  43. }
  44. else
  45. {
  46. if (liczba<2)
  47. {
  48. cout << napis[j];
  49. liczba = 1;
  50. }
  51. else if (liczba == 2)
  52. {
  53. // Nie wyświetli końcowego znaku, bo wychodzisz poza zakres przy ostatnim cyklu pętli -> ...<< napis[j+1]
  54. // Nie wyświelti także znaku w innym miejscu niż na końcu, bo indeks będzie wskazywał na inny już znak
  55. cout << napis[j] << napis[j + 1];
  56. liczba = 1;
  57.  
  58. /*
  59. Nie lepiej wyświetlić tego znaku dwa razy używając tylko jednego indeksu? Pomyśl nad tym i będzie AC.
  60. */
  61. }
  62. else
  63. {
  64. cout << napis[j] << liczba;
  65. liczba = 1;
  66. }
  67. }
  68.  
  69. }
  70. cout << endl;
  71. }
  72. return 0;
  73. }
Success #stdin #stdout 0s 3476KB
stdin
1
AAABB
stdout
A3B