Gå til innhold

hjelp med c++kode, skrive inn ord og reversere det


Anbefalte innlegg

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
Videoannonse
Annonse

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 && ./b

Tast 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
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 && ./b

Tast 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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...