解题思路:
删除的原理就是数组的左移,然后在末尾加上终止符'\0'防止冗余重复,删除空格的原理一样
区分大小写的实现方法就是用或‘||’符号,通过ASCII码加或减32来达到大小写转换的目的,判断三次。
注意事项:
如果主串遍历到的字符等于子串的第一个字符,则开始if判断 ,此时i的值会变化,为了方便之后的回取,用临时变量tmp记录i的值,判断结束后再使i重新 回到判断前的值,以继续判断。
参考代码:
#include<cstdio>//为了快! #include<cstdlib> #include<cstring> int main(){ char del[20]; gets(del);//首先输入待判断字符串 char str[200]; while(gets(str)){//第一层while判断这一行输入的字符串 int i=0; while(i<strlen(str)){//第二层while判断逐个字符 //如果主串遍历到的字符等于子串的第一个字符,则开始if判断 if(str[i]==del[0]||str[i]-32==del[0]||str[i]+32==del[0]){ int tmp=i;//记录起始i的位置,方便之后回取。 int count=0,condition=0,k=0; for(int j=0;j<strlen(del);j++){ if(str[i]==del[k]||str[i]-32==del[k]||str[i]+32==del[k]){ count++;//count为主串与子串匹配的数量 } i++;k++; } if(count==strlen(del)) condition=1;//如果count等于子串长度,则匹配成功 if(condition==1){//匹配成功时 i=tmp;//回到之前起始i的位置 int n=strlen(del);//n为子串长度 int j; while(n--){//循环n次 for(j=i;j<strlen(str)-1;j++){ str[j]=str[j+1]; //从i开始数组整体向左移1个,重复n次 ,从而删除子串 } str[j]='\0'; } } else i=tmp;//回到之前起始i的位置 } if(str[i]==' '){//删除空格 int j; for(j=i;j<strlen(str)-1;j++){//一样,数组左移,以达到删除效果 str[j]=str[j+1]; } str[j]='\0';//别忘了在末尾加终止符防止冗余重复。 } i++;//开始下一个字符判断 } puts(str);//输出当前行,准备开始下一行字符串的判断 } return 0;//华丽结束程序! }
0.0分
0 人评分