原题链接:字符串的查找删除
解题思路:
删除的原理就是数组的左移,然后在末尾加上终止符'\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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复