题目是“判断是不是回文字符串”,输入输出格式如下:
我的代码如下(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这一种办法吗?