h_k Skrevet 13. september 2006 Del Skrevet 13. september 2006 Jeg har skrevet en kode som skriver inn et ord og skal reversere det og sjekke om det er et palindrom. Jeg lurte på hvordan koden skal være i main for å få teksten som blir tastet inn til å bli reversert, og som skal returnere om ordet er et palindrom eller ikke. Noen som kan hjelpe meg? // //palindrome.cpp // // #include <iostream> #include <cstring> #include <string> using namespace std; //leser inn et ord og returnerer det string readAWord(){ string str; cin >> str; return str; } //returnerer en ny streng som representerer //en reversert versjon av `str' string reverseString(char *str){ char reverseStr[strlen(str)]; int j = 0; for(int i=strlen(str)-1;i>=0;i--){ reverseStr[j] = str; } return reverseStr; } //returnerer true eller false alt ettersom //om `str' er et palindrom bool isPalindrom(string str){ int j=0; for(int i=str.size()-1;i>=0;i--) { if(str != str[j]){ return false; } j++; } return true; } main() { string str; cout << "tast inn et ord: " << endl; cin >> str; ------- reverseString str(); if{ str == isPalindrom; cout << "ordet er et palindrom" << endl; } else{ cout << "ordet er ikke et palindrom" << endl; } } Lenke til kommentar
lnostdal Skrevet 13. september 2006 Del Skrevet 13. september 2006 slik: #include <iostream> #include <string> using namespace std; //leser inn et ord og returnerer det string readAWord(){ string str; cin >> str; return str;} //returnerer en ny streng som representerer //en reversert versjon av `str' string reverseStr(string str){ string rev; for(string::reverse_iterator i = str.rbegin(); i != str.rend(); i++) rev.append(1, *i); return rev;} //returnerer true eller false alt ettersom //om `str' er et palindrom bool isPalindrom(string str){ return str == reverseStr(str);} int main(){ string ord; cout << "Tast inn et ord: "; ord = readAWord(); cout << "Ordet du tastet inn er '" << ord << "'" << endl; cout << "Ordet '" << ord << "' reversert er '" << reverseStr(ord) << "'." << endl; if(isPalindrom(ord)) cout << "Ordet '" << ord << "' er et palindrom." << endl; else cout << "Ordet '" << ord << "' er ikke et palindrom." << endl; return 0;} lars@ibmr52:~/programming/c$ g++ -g -Wall b.cpp -o b && ./bTast inn et ord: abc Ordet du tastet inn er 'abc' Ordet 'abc' reversert er 'cba'. Ordet 'abc' er ikke et palindrom. lars@ibmr52:~/programming/c$ g++ -g -Wall b.cpp -o b && ./b Tast inn et ord: abba Ordet du tastet inn er 'abba' Ordet 'abba' reversert er 'abba'. Ordet 'abba' er et palindrom. lars@ibmr52:~/programming/c$ Lenke til kommentar
h_k Skrevet 13. september 2006 Forfatter Del Skrevet 13. september 2006 slik: #include <iostream> #include <string> using namespace std; //leser inn et ord og returnerer det string readAWord(){ string str; cin >> str; return str;} //returnerer en ny streng som representerer //en reversert versjon av `str' string reverseStr(string str){ string rev; for(string::reverse_iterator i = str.rbegin(); i != str.rend(); i++) rev.append(1, *i); return rev;} //returnerer true eller false alt ettersom //om `str' er et palindrom bool isPalindrom(string str){ return str == reverseStr(str);} int main(){ string ord; cout << "Tast inn et ord: "; ord = readAWord(); cout << "Ordet du tastet inn er '" << ord << "'" << endl; cout << "Ordet '" << ord << "' reversert er '" << reverseStr(ord) << "'." << endl; if(isPalindrom(ord)) cout << "Ordet '" << ord << "' er et palindrom." << endl; else cout << "Ordet '" << ord << "' er ikke et palindrom." << endl; return 0;} lars@ibmr52:~/programming/c$ g++ -g -Wall b.cpp -o b && ./bTast inn et ord: abc Ordet du tastet inn er 'abc' Ordet 'abc' reversert er 'cba'. Ordet 'abc' er ikke et palindrom. lars@ibmr52:~/programming/c$ g++ -g -Wall b.cpp -o b && ./b Tast inn et ord: abba Ordet du tastet inn er 'abba' Ordet 'abba' reversert er 'abba'. Ordet 'abba' er et palindrom. lars@ibmr52:~/programming/c$ 6855283[/snapback] Takk for hjelpen, der virket det ja:D Lenke til kommentar
kjetil7 Skrevet 13. september 2006 Del Skrevet 13. september 2006 Vil legge til siden dette er C++ at koden kan gjøres en del kortere og enklere hvis du bruker algoritmene i standardbiblioteket. Gjøre strengen om til små bokstaver (nødvendig hvis det f.eks. tastes inn stor forbokstav): std::transform(str.begin(), str.end(), str.begin(), tolower); Reversere en streng: std::reverse(str.begin(), str.end()); Men strengt tatt trenger du ikke reversere den. Du kan sammenligne den uten å lage en kopi: if(std::equal(str.begin(), str.end(), str.rbegin()) ) { std::cout << str << " er et palindrom" << std::endl; } Med andre ord slik: #include <iostream> #include <string> #include <algorithm> int main() { std::string str; // lese inn ord std::cout << "tast inn ord: " << std::flush; std::cin >> str; // gjør om til små bokstaver std::transform(str.begin(), str.end(), str.begin(), tolower); // sjekker om den er et palindrom if(std::equal(str.begin(), str.end(), str.rbegin()) ) { std::cout << str << " er et palindrom" << std::endl; } else { std::cout << str << " er ikke et palindrom" << std::endl; } } Hvis du ikke er erfaren kan dette virke litt kryptisk, men du vil ha en kjempefordel på sikt hvis du lærer deg å bruke mulighetene i standardbiblioteket. En kanskje litt enklere variant er og reverse strengen slik du gjorde i eksemplet ditt: #include <iostream> #include <string> #include <algorithm> int main() { std::string str; // lese inn ord std::cout << "tast inn ord: " << std::flush; std::cin >> str; // gjør om til små bokstaver std::transform(str.begin(), str.end(), str.begin(), tolower); // kopierer strengen og reverserer den std::string revStr(str); std::reverse(revStr.begin(), revStr.end()); // sjekker om ordet er et palindrom if(str == revStr) { std::cout << str << " er et palindrom" << std::endl; } else { std::cout << str << " er ikke et palindrom" << std::endl; } } Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå