Code:
bool IsPalindrom(char* a, size_t Length)
{
for (char* Temp = a + Length - 1; Temp >= a; Temp--, a++)
{
if (*a != *Temp)
{
return false;
}
}
return true;
}
void PrintPalindromesInText(char* Text)
{
int Found = 0;
while (*Text != '\0')
{
size_t TempLen = 0;
char* Temp = Text;
while (isalpha(*Temp))
{
*Temp++;
TempLen++;
}
if (IsPalindrom(Text, TempLen))
{
puts("Found: ");
for (size_t i = 0; i < TempLen; i++)
{
putchar(Text[i]);
}
putchar('\n');
Found++;
}
Text += TempLen+1;
}
printf("Found %d Palindromes!\n", Found);
}
//aufzurufen z.b.:
PrintPalindromesInText("huhu test anna qwer alla butter reger abba cdddc");
kann man mit strtok noch verkürzen wenn man alle delimiter kennt, ich habs jetzt umgekehrt gemacht und nur das alphabet als gültige zeichen zugelassen.
EDIT:
hier die strtok version:
Code:
void PrintPalindromesInText(char* Text)
{
int Found = 0;
char* Buffer = new char[strlen(Text) + 1];
strcpy(Buffer, Text);
const char* Seperators = " ,.!?;\t\n";
char* Token = strtok(Buffer, Seperators);
while (Token)
{
if (IsPalindrom(Token, strlen(Token)))
{
printf("Found: %s\n", Token);
Found++;
}
Token = strtok(NULL, Seperators);
}
printf("Found %d Palindromes!\n", Found);
}
anwendung genauso wie oben.
den string neu zu kopieren kann man sich sparen wenn man den text vorher in nem veränderbaren buffer hat und nicht als const string übergibt.