给我一个文本,我必须计算出它有多少回文词。无论我键入多少回文总会返回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;
}
答案 0 :(得分:0)
在循环之前,初始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] = '\0'; // 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, " ?.,;");
}