题目:从键盘输入一个可带空格的字符串,判断该字符串是否是回文(回文指正向读与逆向读相同的字符串,如abcddcba或abcba等)。
如果字符串是回文,输出"Yes",否则输出"No"。
法一:
int myfun(char *s){
int i,j;
for(j=strlen(s)-1,i=0;i<j;i++,j--)
if(s[i]!=s[j])
return 0;
return 1;
}
int main(void){
char str[64];
printf("Please Input str:");
if(myfun(gets(str)))
printf("Yes!\n");
else
printf("No!\n");
return 0;
}
法二:
void main() {
char s[64];
printf("Please Input str:");
scanf("%s",s);
int i = 0;
for ( ; s[i] != '\0'; i++);
int j = --i;
for (i = 0; ; ) {
if (j<0) {
printf("Yes\n");
break;
}
if (s[i] != s[j]) {
printf("No\n");
break;
}
i++;
j--;
}
}
法三:忽略大小写
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int fun(char *s){
char *lp, *rp;
lp = s;
rp = s + strlen(s) - 1;
while ((toupper(*lp) == toupper(*rp)) && (lp < rp)) {
lp++;
rp--;
}
if (lp < rp)
return 0;
else
return 1;
}
int main(){
char s[81];
printf("Enter a string: ");
scanf("%s", s);
if (fun(s))
printf("\n\"%s\" is a Palindrome.\n\n", s);
else
printf("\n\"%s\" isn't a Palindrome.\n\n", s);
}