先消除输入字符串s的前后空格,再判断其是否为“回文”,若是则输出为YES否则输出NO用c语言实现

先消除输入字符串s的前后空格,再判断其是否为“回文”,若是则输出为YES否则输出NO用c语言实现

img

供参考:

#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;
}

  • 以下回答由chatgpt基于相关博客总结生成:

    解决方案:

    #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函数可以读取整个字符串,包括空格和其他非字母字符。