codeup100000580问题 C: 字符串的查找删除

codeup100000580问题 C: 字符串的查找删除

题目描述

给定一个短字符串(不含空格),再给定若干字符串,在这些字符串中删除所含有的短字符串。
输入

输入只有1组数据。
输入一个短字符串(不含空格),再输入若干字符串直到文件结束为止。
输出

删除输入的短字符串(不区分大小写)并去掉空格,输出。
样例输入 Copy

in
#include
int main()
{

printf(" Hi ");
}

样例输出 Copy

#clude
tma()
{

prtf(“Hi”);
}

提示

注:将字符串中的In、IN、iN、in删除。
题目链接
http://codeup.cn/problem.php?cid=100000580&pid=2

本题属于字符串处理问题,对我这种编程菜鸡(初学)并不是很友好,但是也写一些感悟与总结以便自己复习提高。
思路如下:
1>输入处理:
    短串因为只输入一个所以随便输入即可
    需要删除处理的长串涉及到空格,回车,多行,因此可以考虑用多点测试方法输入
    这里需要注意scanf("%s",str)和gets(str)的区别,前者在控制台输入时以空格或者回车作为一个字符串结束,而后者识别回车但是不识别空格,这里推荐每行输入整体作为一个字符串去处理类似这种int main()的情况,为了把中间的空格也识别到,用gets更好,免去很多处理步骤
2>处理过程:
    大致思想即为:我拿着大串str去挨个字符对照小串的第一个字符ch[0],只要不匹配且不是空格,我就直接把这一位字符输出即可;如果发现匹配了,那么再进一层循环,大串和小串同时按位比较(具体处理见代码部分即注释部分)
#include <stdio.h>
#include <string.h>
#include <math.h>
char ch[10],str[50];
int main() {
    scanf("%s",ch);
    getchar(); //接收一下输入ch后的回车,否则这个回车将被接收在str[]的第一行,导致程序进入while循环而输出一空行
    int len=strlen(ch);
    while (gets(str)) {
        int len1=strlen(str);
        int i,k,j;
        for(i=0; i<len1; i++) {   // 每个str[i]先与ch[0]匹配
            if(fabs(str[i]-ch[0])==0||fabs(str[i]-ch[0])==32) {    //不区分大小写匹配;
                int m=0;
                k=0;      //k标记小串的头
                while (k<len) {
                    if(fabs(str[i]-ch[k])==0||fabs(str[i]-ch[k])==32) {
                        i++;   //str后移
                        k++;   //ch后移
                        m++;   //m记录失败后i的回退位数
                    } else
                        break;   //有一位不匹配直接退出
                }
                if(k==len)
                    i--;    //i回退一,因为for 循环i还要加一,i前面的len位要删除(不输出)
                else {
                    for(j=0; j<m; j++)
                        i--;
                    printf("%c",str[i]);  //只要在0<=k<len之间有一位不匹配,即i的前m位不能删(都得输出)
                }
            } else {         //不匹配即不用删除,直接过滤掉空格输出
                if(str[i]!=' ')
                    printf("%c",str[i]);
            }
        }
        printf("\n");
    }
    return 0;
}

注:1>字符串声明放main 外面,否则可能出现运行错误;main函数在运行时尽量不要申请太大的空间
2>代码开头的getchar();如果不要,会是这种结果:
第二行本来要输入str但是gets把空行接收成一个字符串进入了循环导致先输了个空行
第二行本来要输入str但是gets把空行接收成一个字符串进入了循环导致先输了个空行。
3>提供几个测试结果:
在这里插入图片描述
4>本题输出结果:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值