【202002】牛客网“回文字符串”

题目是“判断是不是回文字符串”,输入输出格式如下:
在这里插入图片描述
我的代码如下(AC):

#include<stdio.h>
#include<string.h>
const int maxn = 10010;
char str[maxn][maxn] = {0};
//char otc[maxn][maxn] = {0};

int judge(char str[][maxn], int m, int n){
    int i = 0, j = n - 1;
    while(i < j){
        if(str[m][i] == str[m][j]){
            i++;
            j--;
        }else{
            //return 'NO!';
            printf("No!\n");
            return 0;

        }
    }
    printf("Yes!\n");
    return 0;

}

int main(){
    int m = 0, len;
    while(scanf("%s", str[m]) != EOF){
        len = strlen(str[m]);//get the length of some row.
        //strcpy(otc[m], judge(str, m, len));//copy the content which returned by judge().
        judge(str, m, len);
        m++;//next sentence.
    }
    //for(int i = 0; i < m; i++){
    //    printf("%s\n", otc[i]);
    //}
    return 0;
}

上述代码中被注释掉的错误思想如下:
原本根据给出的输入输出格式,我以为得连续输入几行字符串,再连续输出几行对应的yes/no判断。所以我用了scanf(…)!=EOF来判断输入是否结束。用otc[maxn][maxn]来存放对每行字符串的判断。
例如:输入第一行存入str[][],将对第一行的判断存入otc[][],输入第二行,将对第二行的…CTRL+D结束输入后,将数组otc[][]的内容输出。

正确思想:其实挺简单,写一个judge函数判断一句字符串是否是回文字符串。judge函数的格式有点类似“快速比较”,分别利用i,j从串头和串尾出发,一一对比i,j指向的字符是否一致。

存疑的地方:
1.注释掉的部分中,strcpy(otc[m], judge(str, m, len));这句总是报错:invalid conversation from char to const char*.
2.char judge()函数return ‘NO’;这种写法对吗?想返回字符串该怎么写?字符串赋值只有strcpy这一种办法吗?

发布了6 篇原创文章 · 获赞 0 · 访问量 79

猜你喜欢

转载自blog.csdn.net/weixin_40246778/article/details/104251222