标题:是否是回文?
只看楼主
dylan628
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2017-1-4
结帖率:75%
已结贴  问题点数:10 回复次数:6 
是否是回文?
编写程序读一条消息,然后检查这条消息是否是回文(消息中的字母从左往右看和从右往左看是一样的):

Enter a message: He lived as a devil, eh?
Palindrome

Enter a message: Madam, I am Adam.
Not a palindrome

忽略所有不是字母的字符。用整形变量来跟踪数组中的位置。不是指针。

求大神指点,这是C语言书籍上的练习题。尝试过,但不知道怎么对比左右是否对称。
搜索更多相关主题的帖子: message 编写程序 练习题 Enter C语言 
2017-01-17 18:14
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:4 
设置两个指针,分别指向字符串的头、尾,对比。
需要设置循环判断语句,用来跳过可能存在的空格或别的标点符号。

不能用指针?那就直接用字符串数组的下标咯。
用strlen函数来计算字符串数组的长度,那头尾来对比就好了。

[此贴子已经被作者于2017-1-17 21:53编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-01-17 19:51
ICU
Rank: 4
等 级:业余侠客
威 望:2
帖 子:92
专家分:268
注 册:2017-1-14
得分:4 
1.检查消息长度n
2.设置一个半长度循环i,循环内检查消息第i字符和第n-i字符是否相同
3.检查循环变量是否到达了循环终值,if(i==终值),说明是回文
2017-01-17 20:14
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:0 
编辑掉。

[此贴子已经被作者于2017-1-17 21:53编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-01-17 20:19
ICU
Rank: 4
等 级:业余侠客
威 望:2
帖 子:92
专家分:268
注 册:2017-1-14
得分:0 
    char name[40];
    int i=0,n=0;
    gets(name);
    n=strlen(name)-1;
    for(i=0;i<n>>1;i++)
    {
         if(tolower(name[i]) != tolower(name[n-i]))  break;
    }
    if(i==n>>1)printf("是回文",name);
    else printf("Not");
 
2017-01-17 20:47
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
得分:4 
#include<stdio.h>
char* Filter(char*str)
{
    int len=strlen(str);
    char*p=str;
    while(p[0]!='\0')
    {
        (p[0]<65||(p[0]>90&&p[0]<97)||p[0]>122)?strcpy(p,p+1):p++;
    }
    return str;
}
int CheckPalindrome(char*str)
{
    int scope=strlen(str)/2,len=strlen(str),i;
    for(i=0;i<scope;i++)
        if(str[i]!=str[len-1-i])
            return 0;
    return 1;
}
int main()
{
    char str1[20];
    printf("输入字串(半角字符20个以内)");
    //scanf("%s",str1);
    gets(str1);
    if(CheckPalindrome(Filter(str1)))
        printf("是回文");
    else
        printf("不是回文");
    return 0;
}
//不光要首尾判断,还要滤非字母字符
2017-01-17 22:38
dylan628
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2017-1-4
得分:0 
感谢楼上各位大神的指点!!!
2017-01-18 17:30



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-473667-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029114 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved