游乐游手机版
首页/AI教程/文章详情

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

时间:2026-06-14 14:08
函数squeeze(s1,s2)从字符串s1中删除所有在s2中出现的字符。实现原理:外层循环遍历s2每个字符,内层循环扫描s1,将不匹配的字符依次前移覆盖,最后设置字符串结束符截断,完成原地过滤。

C语言字符串字符删除问题详解

先看一个经典的字符串处理题目:需要编写一个名为 squeeze(s1, s2) 的函数,其核心任务是从字符串 s1 中移除所有同样出现在 s2 中的字符。换句话说,s2 相当于一张“黑名单”,s1 中只要与黑名单上的字符匹配,就全部删除。

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

问题拆解与分析

整个实现需要分几个模块来搭建:

  • 主函数 main:负责接收用户输入的字符串,并驱动整体处理流程。
  • 自定义输入函数 get_line:注意此处不能直接使用书本上的 getline,因为标准库 stdio.h 中已存在同名函数,容易引发命名冲突。
  • 核心函数 squeeze:真正执行逻辑的部分——从 s1 中剔除 s2 里出现的所有字符。

代码实现与解析

下面是一份简洁的实现代码,逻辑直观清晰:外层循环遍历“黑名单”中的每个字符,内层循环逐个扫描目标字符串,将不匹配的字符向前移动,最后在末尾添加字符串结束符。

#include
#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:");
    get_line(search); 
    printf("Type the subject:");
    while(len = get_line(line) > 0)
    {
        squeeze(line, search);
        printf("The result is: %s ", line);
    }
    return 0;
}

//接收一行字符串 
int get_line(char s[])
{
    int i;
    char c;
    for(i = 0; i < LINE - 1 && (c = getchar()) != EOF && c != ''; 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;
}

代码中 squeeze 函数采用了两层循环的设计,思路非常明确:每次取出黑名单中的一个字符,遍历当前 subject 的每一个字符,只要不等于该字符,就通过索引 j 重新写入数组前端进行保留,最后截断字符串。经过一轮操作,即剔除了一种字符。重复上述过程直到黑名单遍历完毕,剩余的就是经过完全过滤后的字符串。这种实现方式也是《C程序设计语言(第二版)》习题2-4的经典解法之一,适合初学者理解字符串过滤的核心逻辑。

来源:https://developer.aliyun.com/article/704716
上一篇Chrome隔离机制多维实践与落地指南 下一篇HTML5+AI智能健身动作识别实战教程
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
CapCut AI Docker 一键部署:镜像拉取、端口映射与数据目录配置教程
AI教程 · 2026-06-30

CapCut AI Docker 一键部署:镜像拉取、端口映射与数据目录配置教程

CapCutAI容器化部署需先确认镜像来源与授权范围,再完成环境准备、镜像拉取、端口映射、数据目录挂载和启动验证,适合本地试用、团队内网演示与轻量化AI剪辑服务管理。

CapCut AI Windows本地安装配置2026最新版含下载与环境要求
AI教程 · 2026-06-30

CapCut AI Windows本地安装配置2026最新版含下载与环境要求

CapCutAI与剪映AI在Windows端适合短视频、口播、课程和营销素材剪辑,安装前需确认系统、显卡、存储与网络条件,优先选择官方渠道下载,并完成账号、素材目录、硬件加速和导出参数配置。

Veo新手保姆级安装教程:从下载到首次运行
AI教程 · 2026-06-30

Veo新手保姆级安装教程:从下载到首次运行

Veo适合用文字生成短视频,新手应先确认官方入口、准备账号与设备环境,再按网页或应用方式完成启用。首次运行重点在提示词、参数、素材合规与结果保存,避免使用非官方安装包。

Veo本地模型运行下载路径设置与性能优化指南
AI教程 · 2026-06-30

Veo本地模型运行下载路径设置与性能优化指南

Veo本地模型部署需先确认模型来源与硬件条件,再完成下载校验、目录规划、路径配置和推理参数优化。重点关注显存占用、依赖版本、缓存位置、授权范围与常见报错处理。

Veo安装失败解决指南:常见报错与日志排查及升级回滚方案
AI教程 · 2026-06-30

Veo安装失败解决指南:常见报错与日志排查及升级回滚方案

Veo安装失败通常与系统环境、依赖版本、网络源、权限和缓存有关。排查时应先确认版本要求,再查看安装日志,按报错类型处理,并提前备份项目,确保升级与回滚可控。