输入一个字符串,判断是否为回文

从键盘输入一个字符串,判断是否为回文(即对称),例如:输入1234567654321,输出“YES" ;输入123456,输出”NO"#include<stdio.h>
void main()
{
char a[20];
int i,j,d;
gets(a);
d=strlen(a);
for(i=0;i<d;i++)
{for(j=d;j>0;j--)<br>if(a[i]==a[j])<br> printf("Yes"); break;<br>if(a[i]!=a[j])<br> printf("No"); break;<br>}
}有yes的输出。没有no的。

1、回文判断方法:

有一个字符串,依次作如下判断:

第一个字符与最后一个字符是否相同

第二个字符与倒数第二个字符是否相同

......

只要有一对字符不相同,则不是回文,否则为回文。

2、可以参考下面的代码:

int huiwen(char *s)

{

char *p = s;

while(*p) p++;//找到结束符\0的位置。

p--;//\0的前一个字符,就是字符串的最后一个字符。

while(s<p)

{

if(*s != *p) return 0;//发现不同,不是回文。

s++;

p--;//二者向中间移动。

}

return 1;//到相遇后一直相同,是回文。

}

int main()

{

char s[100];

scanf("%s",s);//输入字符串。

if(huiwen(s))//判断是否回文并输出结果。

printf("%s是回文字符串\n",s);

else

printf("%s不是回文字符串\n",s);

return 0;        

}

扩展资料:

isdigit()函数:判断一个字符是否为数字

iscntrl()函数:判断一个字符是否为控制字符

isalpha()函数:判断一个字符是否是字母

isalnum()函数:判断一个字符是否是字母或者数字

double cabs(struct complex znum) 返回复数znum的绝对值

double fabs(double x) 返回双精度参数x的绝对值

long labs(long n) 返回长整型参数n的绝对值

modf()函数:提取浮点数的小数和整数部分

参考资料来源:百度百科-C语言函数

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-11-22

#include <stdio.h>

#include <string.h>

#define N 100

int main(){

char s[N];

int i,j,n,count=0;

printf("Input a string:\n");

gets(s);

n=strlen(s);

for(i=0,j=n-1;i<j;i++,j--){

if(s[i] == s[j])

count++;

else

count--;

}

if(count == (n/2))

printf("输入的是回文。");

else

printf("输入的不是回文。");

return 0;

}

程序解析:

输入提示信息:“Input a string:\n”

输入格式:gets()

判断是回文的输出提示信息:“输入的是回文。”

判断不是回文的输出提示信息:“输入的不是回文。”

扩展资料:

gets()函数:从标准输入设备读字符串函数。

用来从标准输入设备(键盘)读取字符串直到换行符结束,但换行符会被丢弃,然后在末尾添加'\0'字符。

其调用格式为:

gets(s);

其中s为字符串变量(字符串数组名或字符串指针)。

gets(s)函数与scanf("%s",s)相似,但不完全相同。

使用scanf("%s",s) 函数输入字符串时存在一个问题,就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理,但gets()函数将接收输入的整个字符串直到遇到换行为止。

本回答被网友采纳
第2个回答  2015-12-11

用两头凑法,找到字符串的最后一个字符,与第一个字符比较。然后各自向中间移动,逐个比较。如果比较中出现不同,则不是回文。当二者相遇时,一直都相同,则字符串为回文。

参考代码如下:

int huiwen(char *s)
{
    char *p = s;
    while(*p) p++;//找到结束符\0的位置。
    p--;//\0的前一个字符,就是字符串的最后一个字符。
    while(s<p)
    {
        if(*s != *p) return 0;//发现不同,不是回文。
        s++;
        p--;//二者向中间移动。
    }
    return 1;//到相遇后一直相同,是回文。
}

int main()
{
    char s[100];
    scanf("%s",s);//输入字符串。
    if(huiwen(s))//判断是否回文并输出结果。
        printf("%s是回文字符串\n",s);
    else
        printf("%s不是回文字符串\n",s);

    return 0;        
}

第3个回答  2017-10-30

回文判断方法:

有一个字符串,依次作如下判断:

第一个字符与最后一个字符是否相同

第二个字符与倒数第二个字符是否相同

......

只要有一对字符不相同,则不是回文,否则为回文。

以下是C语言代码,供参考:

#include <stdio.h>
#include <string.h>
#define N 100        //定义存储字符串的数组大小
int main(void)
{
    char str[N];
    int i,j,flag=1;  //定义int型变量flag,作为判断是否回文的标志
    printf("请输入字符串:");
    gets(str);       //把输入的字符串存入数组
    i=strlen(str)-1; //下标从0开始,最后字符下标为字符串长度-1
    for(j=0;j<=i;i--,j++)
          if(str[i]!=str[j])
        {
            flag=0;  //只要有一对相比较的字符不同,则置flag为0
            break;
        }
    if(!flag)        //若flag非真,即为0,则输出不是回文
        printf("不是回文\n");
    else
        printf("是回文\n");
    return 0;
}

第4个回答  2013-12-14
下面经过我的测试,如果长度为奇数,如12321也会返回YES。
/*
* File: main.c
* Author: dreamsxin
*
* Created on 2010年5月22日, 下午2:33
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/*
*
*/
int main(int argc, char** argv) {
char a[20];
int i, len, flag = 0;
printf("请输入字符串:\n");
gets(a);
len = strlen(a);
if (len < 2) {
printf("长度小于2\n");
return 0;
}
for (i = 0; i <= len / 2; i++) {
if (a[i] != a[len-i-1]) {
//printf("i=%d,len-i=%d\n", i, len-i-1);
flag = 1;
break;
}
if (flag == 1) {
break;
}
}
if (flag == 1) {
printf("No");
} else {
printf("Yes");
}

return (EXIT_SUCCESS);
}
相似回答