计蒜客 —— 字符串判等问题
本题的测试数据有点bug,表述不清晰
详情可以见 提问
题目信息:
第一种方法:
#include<stdio.h> #include<string.h> char aa[110]; char b[110]; char c[110]; int main(){ char a; int i =0; while( (a = getchar()) != '\n'){ if (a == ' ') continue; if(a >= 65 && a <= 90){ a = a + 32; } aa[i] = a; i++; } aa[++i] = '\0'; gets(b); int bl = strlen(b); int j = 0; for(i = 0;i < bl;i++){ if (b[i] == ' ') continue; if(b[i] >= 65 && b[i] <= 90){ b[i] = b[i]+ 32; } c[j] = b[i]; j++; } int x = strcmp(c,aa); if(x == 0) printf("YES"); else printf("NO"); return 0; }
分析题目,第一行末尾 一定义有换行符 ' \n ',故可以不断 getchar() 读入一个字符,以该字符是否为 ' \n ' 作为结束标志。
每次读入字符,当该字符为 空格时跳过,为大写字母时,加32变为相应的小写字母存入缓冲字符串。
第二行,一个 gets() 函数即可读入一行数据【因为输入序列的末尾可能是 ' \n ' ,也可能没有】,所以一次性读入完事
再利用for循环不断遍历,重复第一行数据输入时的一系列判定操作,将结果存入缓冲字符串。最后将两个缓冲字符串利用函数 strcmp() 比较,完事
# gets() 函数已经废弃掉了,但暂时找不到 C语言中 如何输入 末尾不含‘ \n ’的含有空格的一行数据
# scanf("%[^\n]" , str) 输入一行数据包括空格,直到遇到换行符 ' \n '
# c++ 中可以 cin.getline(a,100) 将一行序列存入a中,且最大字符数为 100,就可以实现输入 末尾不含‘ \n ’的含有空格的一行数据
第二种方法:
#include<stdio.h> #include<string.h> char aa[110]; char b[110]; int main(){ char a; int i =0; while( (a = getchar()) != '\n'){ if (a == ' ') continue; if(a >= 65 && a <= 90){ a = a + 32; } aa[i] = a; i++; } aa[++i] = '\0'; i = 0; while( (a = getchar()) != EOF && a != '\n'){ if (a == ' ') continue; if(a >= 65 && a <= 90){ a = a + 32; } b[i] = a; i++; } b[++i] = '\0'; int x = strcmp(aa,b); if(x == 0) printf("YES"); else printf("NO"); return 0; }
原理差不多~