Palindromy z wczytanego pliku

Palindromy z wczytanego pliku
AN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0

c) Znajdź napis najdłuższy. Wypisz pierwszy z nich. Podaj w jednym wierszu po kolejnych spacjach jego pozycję (numer wiersza), jego długość i jego postać
int funkcja_c(vector <string> array)
{
string temp;
int a;
bool palindrom=true;
for(int i=0; i<array.size();i++)
{
temp=array[i];
for(int j=0; j=temp.length();j++)
{
if(temp[j] != temp[temp.length()-1-j])
{
palindrom = false;
break;
}
else
{
palindrom = true;
cout<<temp;
a++;
}
}
}
return a;
wie ktoś dlaczego to nie działa?

  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 158
2
andonka napisał(a):

wie ktoś dlaczego to nie działa?

dlatego, że autor nie rozumie tego co robi

  1. sformatuj kod w czytelny sposób
  2. zastanów się co robi
Kopiuj
for(int j=0; j=temp.length();j++)
  1. weź jakieś przykładowe słowo i przeanalizuj działanie programu, w szczególności pętli if
lion137
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5023
2

Tytuł: Palindromy z wczytanego pliku.
W opisie:

Znajdź napis najdłuższy. Wypisz pierwszy z nich. Podaj w jednym wierszu po kolejnych spacjach jego pozycję (numer wiersza), jego długość i jego postać

FTW?

MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
1

A ja poproszę definicję palindromu jak masz użyć i czy ma zajmować całą linię, czy może rozciąć się na wiele linii:

Kopiuj
kajak
a to kajak
Jez leje lwa paw leje lzej
Jez leje lwa, paw leje lzej.
Ile Roman ładny dyndał na moreli?
Jeż leje lwa,
paw leje lżej.

zależnie od definicji powyższy przykład ma od 1 do 6 palindromów.

A to twój kod sformatowany i pokolorowany:

Kopiuj
int funkcja_c(vector<string> array)
{
    string temp;
    int a;
    bool palindrom = true;
    for (int i = 0; i < array.size(); i++) {
        temp = array[i];
        for (int j = 0; j = temp.length(); j++) {
            if (temp[j] != temp[temp.length() - 1 - j]) {
                palindrom = false;
                break;
            }
            else {
                palindrom = true;
                cout << temp;
                a++;
            }
        }
    }
    return a;
}

Czemu ten twój kod wypisuje cokolwiek?

AN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0

Przeanalizowałem swoj program i postanowiłem go całkowicie zmienić teraz wygląda tak.
int funkcja_c(vector <string> array)
{
string temp;
int j,a;
bool palindrom=true;
for(int i=0; i<array.size(); i++)
{
temp=array[i];
j=temp.size()-1;
while(palindrom && i<j)
{
if(temp[i]=temp[j])
{
i++;
j--;
a++;
}
else
{
palindrom=false;
}
if(palindrom)
{
cout<<temp<<endl;
}
}

}

return a/2;
tylko nadal cos nie działa i moj mózg nie moze tego pojąć :D

YA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 252
0

Nie wczytywałem się bardzo dokładnie w twój kod, bo od razu widzę 2 poważne problemy:

  • if(temp[i]=temp[j])
  • while(palindrom && i<j) - Do czego używasz zmiennej i, do iterowania po tablicy stringów czy do iterowania znaków w jednym stringu?
_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
1

Zacznij od wydzielenia funkcji:

Kopiuj
bool ispalindrom(const string &s)
{
   for(int i=0,k=s.size()-1;i<k;++i,--k) if(s[i]!=s[k]) return false;
   return true;
}

Wtedy:

Kopiuj
int countpalindroms(const vector<string> &data)
{
   int count=0;
   for(int i=0;i<data.size();++i) if(ispalindrom(data[i])) cout<<(++count)<<": "<<data[i]<<endl;
   return count;
}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.