判断输入的一个字符串是否为回文串,若是输出“Yes”,否则输出“No”。

回文串是指正读和反读都一样的字符串
下面是我的代码为什么不对?还有这两个错误提醒。我是用object-c编译的。

#include <stdio.h>

#include <stdlib.h>

int main(void){

char str[100];

gets(str);

int length;

length=strlen(str);

char str1[100];

int a;

for (int i=0; i<length; ++i) {

for (a=length-2; a>=0; --a) {

str1[i]=str[a];

}

}

if (strcmp(str,str1)==0) {

printf("Yes");

}

else printf("No");

return 0;

}

错误原因:

1)C语言中变量的定义属于声明,需要写在一个函数的开始部分。

2)把一个字符串中的字符逆序取出赋值给另一个字符数组时,记得末尾加上空字符。

参考代码如下,希望能帮到您!

#include <stdio.h>

#include <stdlib.h>

int main(void)

{

    char str[100];

int length;

char str1[100];

int a=0;

int i;

    gets(str);

    //int length;

    length=strlen(str);

    //char str1[100];

    //int a;

   // for(int i=0; i<length; ++i)

/*

for(i=0; i<length; ++i) 

{

        for (a=length-2; a>=0; --a)

{

            str1[i]=str[a];

        }

    }*/

for(i=length-1; i>=0; --i) 

{

str1[a]=str[i];

a++;

    }

str1[a]=0;

    if(strcmp(str,str1)==0) 

{

        printf("Yes\n");

    }

    else 

printf("No\n");

    return 0;

}


追问

C语言中变量的定义属于声明,需要写在一个函数的开始部分不是很了解,为什么不能要用的时候再定义,一定要定义在开头那里?

追答

这是C语言的规定哈。看来你目前的基础还是比较薄弱,给你推荐一本入门级的书,参考下

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-12-04

楼主你忘记加字符串类函数的头文件#include <string.h>,所以strlen,strcmp都是无法使用的,

 

而且代码也有些问题,无法得出正确的结果,我帮你修改了一下,你好好看看理解一下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{

    char str[100];

    gets(str);

    const int length = strlen(str);

    char str1[100];
 

    for (int i = length; i > 0; --i)
    {
  str1[length - i] = str[i - 1];
  
    }
 str1[length] = '\0';
    if (strcmp(str,str1) == 0)
    {

        printf("Yes");

    }

    else printf("No");

    return 0;

}

第2个回答  2019-01-19
献上代码
#include <bits/stdc++.h>
using namespace std;
string a;
int len=0, t=1, i=0;
int main()
{
getline(cin, a);
len = a.size();
for(i=0;i<len/2;i++)
if(a[i]!=a[len-1-i])
{
t=0;
break;
}
if(t) cout<<"Yes";
else cout<<"No";
return 0;
}
相似回答