先消除输入字符串s的前后空格,再判断其是否为“回文”,若是则输出为YES否则输出NO用c语言实现
供参考:
#include <stdio.h>
#include <string.h>
int main()
{
char ch,s[80],*p,*q;
int i,j,n;
gets(s);
p = s; // 1分
while (*p == ' '){
p++; // 1分
}
n = strlen(s);
q = s + n -1;// 1分
while (*q == ' '){
q--; // 2分
}
while (p < q && *p == *q){ // 2分
p++;
q--; // 2分
}
if (p < q)
printf("NO\n");
else
printf("YES\n");
return 0;
}
解决方案:
#include <stdio.h>
#include <string.h>
void removeSpaces(char *str);
void checkPalindrome(char *str);
int main(){
char str[1000];
printf("请输入字符串:");
fgets(str, 1000, stdin);
removeSpaces(str);
checkPalindrome(str);
return 0;
}
//去除字符串前后空格
void removeSpaces(char *str){
int n=strlen(str);
int start=0, end=n-1;
while(start<=end && str[start]==' '){
start++;
}
while(end>=0 && str[end]==' '){
end--;
}
for(int i=0;i<=end-start;i++){
str[i]=str[i+start]; //前移空格
}
str[end-start+1]='\0'; //截取字符串
}
//判断是否回文
void checkPalindrome(char *str){
int n=strlen(str);
int start=0, end=n-1;
while(start<=end){
if(str[start]!=str[end]){
printf("NO\n");
return;
}
start++;
end--;
}
printf("YES\n");
}
首先,我们需要实现一个函数来去除字符串的前后空格。这里采用的是移动字符的方法,首先从字符串开头找到第一个非空格字符,然后从字符串末尾往前找到第一个非空格字符,然后将中间的字符向前移,最后将多余的字符截取掉。
然后,我们需要实现一个函数来判断字符串是否为回文。回文即正着读和倒着读都一样的字符串。我们使用两个指针,一个指向字符串开头,一个指向字符串末尾,如果两个指针所指的字符相等,则继续往中间移动,否则说明不是回文,直接输出NO。
最后,在main函数中,我们输入字符串,先去除前后空格,再判断是否为回文,输出YES或NO即可。
注意:本题输入字符串需要使用fgets函数,而不是scanf函数。因为scanf函数在读取字符串时遇到空格或其他非字母字符就会停止读取,而fgets函数可以读取整个字符串,包括空格和其他非字母字符。