注册 登录
编程论坛 C++教室

关于回文

流年226 发布于 2013-05-05 19:58, 455 次点击
#include<stdio.h>
#include<string.h>
#define n 50
void main()
{
    int i,j,num=0;
    char st1[n+1];
    char str[100][n+1];
    char *pst1,*pst2;
    printf ("输入字符串:");
    while(1)
    {
      if(scanf("%s",st1)=='end')
          break;
      strcpy (str[num],st1);
      num++;   
    }
    for(j=0;j<num;j++)
    { pst1=str[j];
    pst2=str[j];
    while(*pst1!='\0')
        pst1++;
    i=0;
    pst1--;
    while(*pst1==*pst2 )
    {
        pst1--;
        pst2++;
        i++;
        if(i==strlen(str[j]))
            break;
    }
    if(i==strlen(str[j]))
        printf("该字符串回文\n");
    else
        printf("该字符串不回文\n");
    }
}


哪位帮忙看看哪错了?是看多个字符串是否回文,以end为结束标志。
3 回复
#2
邓士林2013-05-05 21:54
编译没问题啊
#3
apull2013-05-05 22:37
大概看了下,
if(scanf("%s",st1)=='end')不合适
scanf返回的是输入的变量数,单引号内必须是单个字符,字符串要用双引号。
字符串比较不能直接==,要用 strcmp 函数。
if(strcmp(st1,"end")==0)

while(1)会一直执行num++,str[num]会越界的。

获取字符串长度的
while(*pst1!='\0')
        pst1++;
可以用strlen函数代替。
尽量使用库函数,效率会高很多。
#4
流年2262013-05-06 15:40
好的,我再看看,谢谢
1