顺便问一下,return 1是直接跳出所有循环还是只跳出当前的循环?
I have not failed completely
#include <stdio.h> #include <string.h> #include <ctype.h> #include <stdbool.h> int main(void) { char A[100] = {0}; char B[100] = {0};//用于存放A中去掉符号之后的所有小写字母和数字 int j = 0;//用于给B赋值 int i; int PQ = 0; bool OPQ = true; printf("请输入一段文字:\n"); fgets(A,sizeof(A),stdin); for(i=0; i<(strlen(A)); i++) { if( isalnum(A[i]) != 0) { B[j] = tolower(A[i]);//用B来存储A中的小写字符和数字 j++; } } while(PQ < ( strlen(B) ))//判定B是否满足回文的条件 { if( B[PQ] != B[ (strlen(B) - 1 ) - PQ]) { OPQ = false; break;//跳出while循环 } PQ++; } if(OPQ == true) printf("\n这是一个回文\n"); else printf("\n这不是一个回文\n"); return 0; }
#include <stdio.h> #include <string.h> #include <ctype.h> #include <stdbool.h> int main(void) { char A[100]= {0}; int i,PQ=0; bool OPQ=true; printf("请输入一段文字:\n"); fgets(A,sizeof(A),stdin); for(i=0; i<(strlen(A)); i++) { if(isalnum(A[i])==0)//这里将所有非字母和数字的的字符置为空格了 ,比如i'm变成了i m A[i]=' '; else A[i]=tolower(A[i]);//把所有的字母都改成了小写 } while(PQ<(strlen(A))) { if(A[PQ]==' ')//对所有的非空格字符进行判定 { PQ++; continue; } if(A[PQ]!=A[i-PQ]) /*错误!! 将第PQ个字符(该字符非空格),与第i-PQ个字符比较, 但实际上因为之前的for循环已结束,所以此时的i的值为A的长度,即strlen(A)。 若字符串长度为5的话,就是判定A[0]==A[5],但是A[5]是没有意义的。 再者,之前修改成空格的字符也算在内的。所以这里的A[PQ]可能会与空格字符想比较。 所以此方法无法判定字符串是否回文。 */{ printf("\n这不是一个回文\n"); OPQ=false; return 1;//这里直接结束了整个main函数。相当于程序退出。 } PQ++; } if(OPQ==true) printf("\n这是一个回文\n"); return 0;