回文词 镜像串 ctype.h

来源:互联网 发布:凯立德导航端口怎么看 编辑:程序博客网 时间:2024/04/29 16:05

题目:输入一个字符串,判断它是否为回文串以及镜像串。

样例输入:
NOTAPALINDROME ISAPALINILAPASI 2A3MEAS ATOYOTA
样例输出:
NOTAPALINDROME -- is not a palindrome. ISAPALINILAPASI -- is a regular palindrome. 2A3MEAS -- is a mirrored string. ATOYOTA -- is a mirrored palindrome.

编程如下:

#include <stdio.h>#include <ctype.h>#include <string.h>const char* rev= "A   3  HIL JM O   2TUVWXY51SE Z  8 ";const char* msg[] = {"not a palindrome","a regular palindrome",                     "a mirrored string","a mirrored palindrome"};char ismirrored(char ch){    if(isalpha(ch))    {        return rev[ch - 'A'];    }    return rev[ch - '0' + 25];}int main(){    char s[30];    int i;    int p;    int m;    int len = 0;    while( scanf("%s",s))    {        len = strlen(s);        p = 1; m = 1;for(i = 0; i < (len+1)/2; i++){    if(s[i] != s[len - 1 - i])        {        p = 0;    }    if(ismirrored(s[i]) != s[len - 1 -i])    {        m = 0;    }}printf("%s -- is %s.\n",s,msg[m*2+p]);    }    return 0;}

1、这个代码第一个我遇到的问题是,判断一个字符串的一半,经过测试,应该是 i < (len + 1) /2

2、答案的输出是用了一个一维数组msg,这样简化代码很有意思,希望可以运用到以后编码上。

3、这个代码用到了ctype里面的一个函数,isalpha()来判断是否是字符,同样的,还有isdigit,isprint。
如果一个字符型变量ch-‘A’,则返回的是它在字母表中的顺序,A是0,以此类推。若ch是一个数字,则ch-‘0’返回的是其数字本身,如‘5’-‘0’=5.这种使代码简化的方法要学会。

查阅资料,cytype.h:

ctype.h的C标准库的头文件中提供的声明几个有用的函数测试和字符映射。

所有的功能都接受int作为参数,其值必须是EOF或为unsigned char表示。

所有函数返回的参数c非零(true),如果满足条件。否则返回0。


库函数

以下是在头文件ctype.h中定义的函数:


S.N.函数及说明1int isalnum(int c)
该函数检查传递的字符是否是字母数字。2int isalpha(int c)
该函数是否传递的字符是字母。3int iscntrl(int c)
该函数是否传递的字符是控制字符。4int isdigit(int c)
该函数是否传递的字符是十进制数字。5int isgraph(int c)
该函数是否传递的字符的图形表示,使用的语言环境。6int islower(int c)
该函数检查传递的字符是否是小写字母。7int isprint(int c)
该函数检查传递的字符是否是可打印的。8int ispunct(int c)
该函数检查传递的字符是否是标点符号。9int isspace(int c)
该函数检查传递的字符是否是空白。10int isupper(int c)
该函数检查传递的字符是否是大写字母。11int isxdigit(int c)
该函数检查传递的字符是否是十六进制数字。

该库还包含两个转换函数,也接受并返回一个“整数”

S.N.函数及说明1int tolower(int c)
这个函数转换大写字母为小写。2int toupper(int c)
这个函数小写字母转换为大写。
0 0
原创粉丝点击