Palindromy z wczytanego pliku

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?

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
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
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?

1

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

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:

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?

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

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?
1

Zacznij od wydzielenia funkcji:

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:

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;
}

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