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

问题描述

编写函数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;
}
上一篇:枚举去除大量if-else if -else优化记录


下一篇:C程序设计语言第二版习题2-7