program palindrom i problemy z nim zwiazane...

0
#include <iostream>	
#include<fstream>
#include<string>
using namespace std; 


int main()				
{
    ifstream strum;
    strum.open("D:/c++/danie.txt", ios::in) ; 
    if(!strum) cout<<"blad otwarcia pliku"<<endl;
    int nr = 0; 
    string tablica[20] ;
    while(getline(strum,tablica[nr]))
    {
     cout<<tablica[nr]<<endl; 
     nr++    ;                       
    }
    int dlugosc; 
    for(int k=0; k<20; k++)
    {
        dlugosc = tablica[k].size();     
        cout<<dlugosc<<endl; 
        bool prawda = true; 
    for(int i = 0; i<dlugosc ; i++)
                    {
                        cout<<"jestem w petli"<<endl;
                        char demon = tablica[k].at(2);  
                        cout<<demon<<endl; 
                        
                        if(tablica[k].at(i) == tablica[k].at(dlugosc)) {} 
                        else prawda = false;  
                        dlugosc-- ; 
                        
                        
                    }  
                    if (prawda) cout<<"brawo jest palindrom"<<endl;   
    }                 
}  

mam problem, zapewne z tym wyrazeniem f(tablica[k].at(i) == tablica[k].at(dlugosc)) - co jest nie tak ?:)

z góry thx

0

Czemu twierdzisz że jest problem? Możesz wytłumaczyć w czym on tkwi, jak się objawia?

0
if(tablica[k].at(i) == tablica[k].at(dlugosc-1))

Za takie formatowanie kodu powinno się zakuwać w dyby. :-)

0

Jedyne, co zauważyłem z błędów, to to:

for(int i = 0; i<dlugosc ; i++)

Raczej do "długość / 2"...

0

Piszę z głowy, więc przepraszam za ewentualny błąd. Nie powinno być:
if(tablica[k].at(i) == tablica[k].at(dlugosc - 1 -i))

czyli przy każdym przejściu pętli porównujemy kolejny element stringa z początku i z końca, idąc "do środka".

Poza tym małe uwagi:

  1. sprawdzasz czy udało się otworzyć plik, ale nawet w przypadku błędu program kontynuuje działanie.
  2. tworzysz 20-elementową tablicę stringów, ale dalej czytasz z pliku getline() nie sprawdzając, czy nie wyjeżdżasz za tablicę (czyli gdy w pliku jest więcej niż 20 linii).
0

Chyba mam łatwiejsze rozwiązanie

#include <iostream>
#include <string>
using namespace std;

bool Palindrom(string haslo)
{
	for(int i = 0, j = haslo.length() - 1; i < j; i++, j--)
		if(haslo[i] != haslo[j])
			return false;
	return true;
}

int main()
{
	cout << "Czy kajak to palindrom? " << (Palindrom("kajak") ? "tak" : "nie") << endl;
	getchar();
	return 0;
}
0

dzięki za odp ;) MJay jakbym chciał mieć gotowca to... ;) Chce wiedzieć co w moim sposobie jest złe - odpowiedz tomka rozwiązuje problem

thx

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