计算回文词

时间:2018-10-07 12:57:43

标签: c++

给我一​​个文本,我必须计算出它有多少回文词。无论我键入多少回文总会返回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;
}

1 个答案:

答案 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, " ?.,;");
}