开发者社区> 苟哥> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

C程序设计语言第二版习题2-4

简介: 编写函数squeeze(s1, s2), 把字符串s1中与字符串s2中字符匹配的所有字符都删除
+关注继续查看

问题描述

编写函数squeeze(s1, s2), 把字符串s1中与字符串s2中字符匹配的所有字符都删除。

问题拆分

  • 主函数main
  • 接收用户输入字符串函数 get_line (注意不能按照书本上的getline,因为此函数已在stdio.h 中定义了)
  • 从s1中移除s2中包含的字符 函数 squeeze

代码实现

#include<stdio.h>

#define LINE 1000

int get_line(char s[]);
int squeeze(char s[], char search[]);

int main()
{
    char line[LINE];
    char search[LINE]; //要过滤的字符串 
    int len;

    printf("Type the search:\n");
    get_line(search); 
    printf("Type the subject:\n");
    while(len = get_line(line) > 0){
        squeeze(line, search);
        printf("The result is: %s \n", line);
    }
    return 0;
}

//接收一行字符串 
int get_line(char s[])
{
    int i;
    char c;

    for(i = 0; i < LINE - 1 && (c = getchar()) != EOF && c != '\n'; i++){
        s[i] = c;
    }
    s[i] = '\0';
    return i;
}

/*
 * 核心方法,从目标字符串移除指定字符 
 * 从subject中逐个剔除search中的字符 
 */
int squeeze(char subject[], char search[])
{
    int i, j, k;
    char c;
    k = 0;
    while((c = search[k++]) != '\0'){ //逐个移除 
        for(i = j = 0; subject[i] != '\0'; i++){
            if(subject[i] != c){
                subject[j++] = subject[i];
            }
        }
        subject[j] = '\0';
    }
    return 0;
}

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
谭浩强-习题1.5
请参照本章例题,编写一个C程序,输出以下信息: ************************** Very Good! ************************** 数*号可看出,Very前面9空格,Good前面…… *也是输出的一部分,别光打印Very Good!
0 0
C程序设计语言第二版习题4-1
编写一个函数strrindex(s, t),用于返回字符串t在s中最右出现的位置,如果 s中不 包含t,那么返回-1。
3234 0
C程序设计语言第二版习题3-5
编写函数itob(n, s, b) ,用于把整数n转换成以b为基数的字符串并存到字符串s中。例如, itob(n, s, 16) 表示将n转换成16进制数,并存入s中。
519 0
C程序设计语言第二版习题3-6
修改itoa函数,使得该函数可以接收三个参数。其中,第三个参数为最小字段宽度。为了保证转换后所得的结果至少具有第三个参数指定的最小宽度,在必要时应在所得结果的左边填充一定的空格。
452 0
C程序设计语言第二版习题3-4
在数的反码表示中,上述的 itoa 函数不能处理最大的负数,即 n 等于-2^(字长-1) 的情况。请解释其原因。修改该函数,使它在任何机器上运行时都能打印出正确的值。
510 0
C程序设计语言第二版习题3-3
编写函数expand(s1, s2),将字符串s1中类似于a-z一类的速记符号在字符串s2中扩展为等价的完整列表abc...xyz。该函数可以处理大小写字母和数字,并可以处理a-b-c、a-z0-9与-a-z等类似的情况。作为前导和尾随的-字符原样打印。
4070 0
C程序设计语言第二版习题2-9
在求反码时,表达式 x &= (x - 1) 用于把x最右边的值为1的位删除掉。请解释一下这样做的道理。用这一方法重写bitcount函数 ,使之执行得更快一点
565 0
C程序设计语言第二版习题2-8
问题描述编写一个函数rightrot(x, n),该函数返回将x循环右移n位所得到的值。
598 0
C程序设计语言第二版习题2-7
编写一个函数 invert(x, p, n),该函数返回对 x 执行下列操作后的结果值:将 x 中从第 p 位开始的 n 个(二进制)位求反(即,1 变成 0,0 变成 1),x 的其余各位保持不变。
758 0
C程序设计语言第二版习题2-6
编写一个函数setbits(x, p ,n, y),该函数返回对x执行下列操作后的结果值: 将x中从第p位开始的n个(二进制)位设置为y中最右边n位的值,x的其余各位保持不变
721 0
+关注
苟哥
脚踏实地,希望不被技术世界淘汰
文章
问答
文章排行榜
最热
最新
相关电子书
更多
超全算法笔试 模拟题精解合集
立即下载
超全算法笔试-模拟题精解合集
立即下载
为什么要学函数式编程?
立即下载