JenkinLiu


私信TA

用户名:uq_84475846991

访问量:238

签 名:

等  级
排  名 41739
经  验 360
参赛次数 4
文章发表 1
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

解题思路:

                删除的原理就是数组的左移,然后在末尾加上终止符'\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 人评分

  评论区

  • «
  • »