[c++] znaki obok siebie problem z funkcją

0

Cześć.

Napisałem program, który oblicza ile razy w danym ciągu wystąpiły obok siebie dwa identyczne znaki i wypisuje je.
Uwaga program musi działać przy użyciu co najmniej dwóch funkcji.

#include<iostream>
using namespace std;

short fun(string text)
{
     short arr[50],dlugosc=0,c=0;
     while(text[dlugosc++]!=0)
            if(text[dlugosc-1]==text[dlugosc]) 
                      arr[c++]=text[dlugosc-1];
     return c;
}
char fun2(short c)
{
      short arr[50];
      for(short i=0; i<c; i++)
                cout<<arr[i]<<" ";
}
int main()
{
 string text;
 
 cin>>text;
 fun(text);
 fun2(fun(text));

 return 0;
}

Program nie działa poprawnie, hmm w czym jest problem?

0

arr w fun() i arr w fun2() to dwie osobne zmienne lokalne, a nie ta sama zmienna.

while(text[dlugosc++]!=0)

To nie c-string, a std::string.
Może raczej:

for (unsigned int i = 1; i < text.size(); ++i) { // od 1, bo i-1 musi być >= 0 ;)
    // 
}

Po co wywołujesz fun(text) dwa razy?

Teraz co ja bym zrobił, po pierwsze, nazwałbym sensownie te funkcje. ;) Po drugie, fun dostawałaby stringa po stałej referencji (const string& s) a zwracała vector<char>, czyli znaków które się powtarzają. Liczba tych znaków to rozmiar wektora ( vector<char>::size() ). Druga funkcja przyjmowała by po stałej referencji ów wektor i wyświetlała jego elementy (niemal taki sam loop jak masz powyżej).

1 użytkowników online, w tym zalogowanych: 0, gości: 1