rettelse af en "palindrome"

Tags:    c++

<< < 12 > >>
Hej alle
Jeg har fået den opgave at skrive et program, der læser en besked, så kontroller, om det er en palindome (bogstaverne i beskeden er de samme fra venstre til højre, og fra højre til venstre).

fx:
Enter a message: He lived as a devil, eh?
Palindrome

Enter a message: Madam, I am Adam.
Not a palindrome.

Min c++ kode er:

#include <stdio.h>
#include <string.h>

int main()
{
char palindrome[80];
int left, right;

printf("Enter a message:\n");
fflush(stdout);
gets(palindrome);

left = 0;
right = strlen(palindrome) - 1;

while (palindrome[left] == palindrome[right] && left < right)
{
left++;
right--;
}

if ( left < right )
{
printf("NOT a palindrome.\n\n\t\"%s\"s\n",palindrome);
}
else
{
printf("Palindrome.\n\n\t\"%s\"\n",palindrome);
}

return 0;
}


problemet er så at den angiver hver en tekst jeg skriver ind som værende et "not a palindrome", også selvom det er et palindome. Er der nogen derude der kan se hvad jeg har gjort i min kode???



16 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
OK, tak for hjælpen. Nu virker det med både "A" og "a" og mellemrum, men den bliver forvirret når jeg bruger (?). Har prøvet at google om hvordan man kan få det til at virke med (?), men kunne ikke noget.

nogen forslag?



Problemet er nok at den ikke tager højde for at det første eller sidste tegn ikke nødvendigvis er et bogstav. Det virker heller ikke med . sidst i sætningen.

Det er sådan set logisk nok, det første du gør er at checke om det første og sidste bogstav i sætningen er det samme.

En løsning kunne være at flytte checket ned, så det bliver:
do
{
...
}
while (tolower(palindrome[left]) == tolower(palindrome[right]))

Men så får du umiddelbart problemet med at du så tæller left og right frem inden du laver første check. Det kan du så løse ved at sætte left til at være -1 og right til at være strlen(palindrome) (og ikke trække 1 fra).



Er det sådan du mener:
#include <stdio.h>
#include <string.h>
#include <ctype.h>

int main()
{
char palindrome[80];
int left, right;

printf("Enter a message:\n");
fflush(stdout);
gets(palindrome);

left = -1;
right = strlen(palindrome);

while (!isalpha(palindrome[left]) && left != right);

{
do
{
left++;
}
while (tolower(palindrome[left]) == tolower(palindrome[right]));
do
{
right--;
}
while(!isalpha(palindrome[right]) && right != left);
}
if ( left < right )
{
printf("NOT a palindrome.");
}
else
{
printf("Palindrome.");
}

return 0;
}



Det var vist mere:
Fold kodeboks ind/udKode 




når okay, jamen TUSIND TAK:) Har nu i hvert fald fået det til at virke.

ps: Hvorfor kan jeg ikke give dig nogle point???



Som Jacob skriver var det måske simplere at fjerne alle mellemrum, komma, punktummer osv inden du giver dig til at arbejde med strengen.

Har du tænkt over at sætninger kan indeholde tal?

Da jeg ikke vil have point, lægger jeg alle mine indlæg som "kommentar" i stedet for "svar", man kan kun give point for "svar".



<< < 12 > >>
t