第一次的代码测试点4报错,后来才发现
while(originStr[i]!=’\0’&&realStr[j]!=’\0’){ //这个判断条件就很可能导致,最后一个测试点不通过,因为实际输入的文字串结束而应该输入的文字串未结束时,应该输入的文字串后面可能还会有一些坏键,由于循环已经退出,它们将不能输出,从而导致错误。
#include <stdio.h>
int main(){
int set[258] = {0};
char originStr[81];
char realStr[81];
gets(originStr);
gets(realStr);
int i=0,j=0;
while(originStr[i]!='\0'&&realStr[j]!='\0'){ //这个判断条件就很可能导致,最后一个测试点不通过,因为实际输入的文字串结束而应该输入的文字串未结束时,应该输入的文字串后面可能还会有一些坏键,由于循环已经退出,它们将不能输出,从而导致错误。
if(originStr[i]!=realStr[j]){
if(originStr[i]>='a'&&originStr[i]<='z'){ //若是小写,变成大写
originStr[i] = originStr[i]-32; //小写转大写是减,不是加, 小写字母的ASCALL码比大写的大
}
set[originStr[i]]++;
i++;
}else{
i++;
j++;
}
}
while(originStr[i]!='\0'){ //测试点4:实际打印的已近弄完了,但是理想输入的字符串还没有完,故之后的全是坏键。
if(originStr[i]>='a'&&originStr[i]<='z'){ //若是小写,变成大写
originStr[i] = originStr[i]-32; //小写转大写是减,不是加, 小写字母的ASCALL码比大写的大
}
set[originStr[i++]]++;
}
for(i=0;originStr[i]!='\0';i++){
if(set[originStr[i]]!=0){
printf("%c",originStr[i]);
set[originStr[i]] = 0;
}
}
}