数回文词

Counting palindrome words

本文关键字:回文      更新时间:2023-10-16

我得到了一个文本,我需要数一数它有多少个回文单词。无论我输入多少回文,它总是返回 1。我的尝试 :

#include <iostream>
#include <string.h>
using namespace std;
char s[255],*p,aux[20];
int n,c,k;
int main()
{
cin.get(s,255);cin.get();
p=strtok(s," ?.,;");
while(p)
{
for(int i=strlen(p)-1;i>=0;i--)
{
aux[k]=p[i];
k++;
}
if(strcmp(aux,p)==0)c++;
p=strtok(NULL," ?.,;");
}
cout<<c;
return 0;
}

在 for 循环之前初始 k=0,计数器 c=0 并使用字符串终止符末尾的 '\0'。

char s[255], *p,  aux[20];
cin.get(s, 255); cin.get();
p = strtok(s, " ?.,;");
vector<string> words;
int c = 0,k;
while (p)
{
k = 0; // see here
for (int i = strlen(p) - 1; i >= 0; i--,k++)
{
aux[k] = p[i];
}
aux[k] = ''; // and here
if (strcmp(aux, p) == 0)c++;
p = strtok(NULL, " ?.,;");
}
cout << c << 'n';

根据Sam Varshavchik的建议,避免使用char*,使用std::string和std::stringstream。使用 std::string 回文评估可以使用如下所示的单行代码完成:

while (p)
{
string str(p);
if (str == string(str.rbegin(), str.rend())) {
c++;
}
p = strtok(NULL, " ?.,;");
}