Palindromy z wczytanego pliku

Palindromy z wczytanego pliku
AN
  • Rejestracja:ponad 3 lata
  • Ostatnio:około 3 lata
  • 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?

Tasmanian Devil
"Twój post prawdopodobnie zawiera niesformatowany kod - nie wklejaj bezpośrednio kodu, ale obejmuj go w odpowiednie znaczniki! (jestem botem, ten komentarz został dodany automatycznie)"
  • Rejestracja:ponad 8 lat
  • Ostatnio:5 dni
  • Postów:156
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:ponad 8 lat
  • Ostatnio:2 minuty
  • Postów:4941
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
Moderator C/C++
  • Rejestracja:ponad 17 lat
  • Ostatnio:3 minuty
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?


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 3x, ostatnio: MarekR22
AN
  • Rejestracja:ponad 3 lata
  • Ostatnio:około 3 lata
  • 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

Tasmanian Devil
"Twój post prawdopodobnie zawiera niesformatowany kod - nie wklejaj bezpośrednio kodu, ale obejmuj go w odpowiednie znaczniki! (jestem botem, ten komentarz został dodany automatycznie)"
YA
  • Rejestracja:prawie 4 lata
  • Ostatnio:około 5 godzin
  • 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:prawie 20 lat
  • Ostatnio:14 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;
}

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

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.