【字符串处理算法】删除特定的字符的算法设计及C代码实现

简介: 一、需求描述输入一个长字符串和一个短字符串,编写程序从长字符串中将在短字符串出现过的字符删除掉。例如,长字符串为“1234abcd”,短字符串为“3a”,那么经程序处理之后的字符串为“124bcd”;又如,长字符串为“good bye”,短字符串为“obh”,那么经程序处理之后的字符串为“gd ye”。

一、需求描述

输入一个长字符串和一个短字符串,编写程序从长字符串中将在短字符串出现过的字符删除掉。

例如,长字符串为“1234abcd”,短字符串为“3a”,那么经程序处理之后的字符串为“124bcd”;又如,长字符串为“good bye”,短字符串为“obh”,那么经程序处理之后的字符串为“gd ye”。

 

二、算法设计

我们可以通过将长字符串中的字符逐个与短字符串中的字符相比较来判断是否应该将某个字符从长字符串中删除掉。

即如果长字符串为“1234abcd”,短字符串为“2a”,那么先将长字符串中的第一个字符“1”分别与短字符串中的“2”和“a”相比较,发现都不相等,于是将字符“1”加入到新的字符串中;接着将长字符串中的第二个字符“2”分别与短字符串中的“2”和“a”相比较,发现有相等的,于是不将字符“2”加入到新的字符串中;如此循环执行,直到长字符串中的所有字符都比较完成。

 

三、特殊流程考虑

在编写程序的过程中,我们要对输入的字符串的长度及格式多做考虑,如:

1.如果输入的两个字符串之一含有中文字符,那么程序直接返回而不执行后续流程。

2.如果输入的短字符串的长度大于了长字符串的长度,那么程序直接返回而不执行后续流程。

 

四、程序代码

 

/**********************************************************************
* 版权所有 (C)2016, Zhou Zhaoxiong。
*
* 文件名称: RemoveChars.c
* 文件标识: 无
* 内容摘要: 在长字符串中删除在短字符串中出现过的字符
* 其它说明: 例如, 长字符串为"My name", 短字符串为"na", 那么结果为"My me"
* 当前版本: V1.0
* 作    者: Zhou Zhaoxiong
* 完成日期: 20160318
*
**********************************************************************/
#include 

// 重新定义数据类型
typedef signed   char  INT8;
typedef          int   INT32;
typedef unsigned int   UINT32;

// 函数声明
void RemoveCharsFromStr(INT8 *pszInputLongStr, INT8 *pszInputShortStr);


/**********************************************************************
* 功能描述: 主函数
* 输入参数: 无
* 输出参数: 无
* 返 回 值: 0-执行成功   其它-执行失败
* 其它说明: 无
* 修改日期        版本号     修改人            修改内容
* ---------------------------------------------------------------------
* 20160318        V1.0     Zhou Zhaoxiong        创建
***********************************************************************/
INT32 main()
{
    INT8   szInputLongStr[100] = {0};
    INT8   szInputShortStr[50] = {0};
    UINT32 iPosFlag            = 0;
    
    printf("Please input the long string: \n");
    gets(szInputLongStr);
    printf("InputLongStr=%s\n", szInputLongStr);

    printf("Please input the short string: \n");
    gets(szInputShortStr);
    printf("InputShortStr=%s\n", szInputShortStr);

    // 判断两个字符串中是否有中文字符
    for (iPosFlag = 0; iPosFlag  strlen(szInputLongStr))
    {
        printf("%s is longer than %s, please check!\n", szInputShortStr, szInputLongStr);
        return -2;
    }

    // 调用函数从长字符中将在短字符串中存在的字符删除掉
    RemoveCharsFromStr(szInputLongStr, szInputShortStr);
    
    return 0;
}


/**********************************************************************
* 功能描述: 从长字符中将在短字符串中存在的字符删除掉
* 输入参数: pszInputLongStr-输入的长字符串
             pszInputShortStr-输入的短字符串
* 输出参数: 无
* 返 回 值: 无
* 其它说明: 无
* 修改日期        版本号        修改人          修改内容
* ---------------------------------------------------------------------
* 20160318        V1.0     Zhou Zhaoxiong        创建
***********************************************************************/
void RemoveCharsFromStr(INT8 *pszInputLongStr, INT8 *pszInputShortStr)
{
    INT8   szNewtStr[100] = {0};
    UINT32 iOuterLoopFlag = 0;
    UINT32 iInnerLoopFlag = 0;
    UINT32 iCharUseFlag   = 0;

    if (pszInputLongStr == NULL || pszInputShortStr == NULL)
    {
        return;
    }

    memset(szNewtStr, 0x00, sizeof(szNewtStr));
    
    for (iOuterLoopFlag = 0; iOuterLoopFlag 

 

五、程序测试

我们将编写好的程序“RemoveChars.c”上传到Linux机器,并使用“gcc -g -o RemoveCharsRemoveChars.c”命令对该程序进行编译,生成“RemoveChars”文件。下面对程序进行详细的测试。

1.输入长字符串为“1234abcd”,短字符串为“2a”时,程序运行情况如下:

Please input the long string:

1234abcd

InputLongStr=1234abcd

Please input the short string:

2a

InputShortStr=2a

Remove chars of 2a from 1234abcd, the new str is: 134bcd

 

2.输入长字符串为“Happy dog!”,短字符串为“ao”时,程序运行情况如下:

Please input the long string:

Happy dog!

InputLongStr=Happy dog!

Please input the short string:

ao

InputShortStr=ao

Remove chars of ao from Happy dog!, the new str is: Hppy dg!

 

3.输入长字符串为“我们123”,短字符串为“345”时,程序运行情况如下:

Please input the long string:

我们123

InputLongStr=我们123

Please input the short string:

345

InputShortStr=345

我们123 has Chinese character, please check!

 

4.输入长字符串为“12345”,短字符串为“234567”时,程序运行情况如下:

Please input the long string:

12345

InputLongStr=12345

Please input the short string:

234567

InputShortStr=234567

234567 is longer than 12345, please check!

 

5.输入长字符串为“abcdsf”,短字符串为“af2”时,程序运行情况如下:

Please input the long string:

abcdsf

InputLongStr=abcdsf

Please input the short string:

af2

InputShortStr=af2

Remove chars of af2 from abcdsf, the new str is: bcds

 

六、需求扩展

基于本文中的需求和程序,我们可考虑对需求进行以下扩展:

1.如果短字符串中的某个字符在长字符串中存在,那么在长字符串的对应位置用空格占位,而不是直接将该字符从长字符串中删除。

2.不限制输入字符串中不能出现中文字符,即如果长字符串为“我们123”,短字符串为“我1”,那么经程序处理之后的字符串为“们23”。

 

目录
打赏
0
0
0
0
260
分享
相关文章
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
加密算法、排序算法、字符串处理及搜索算法详解
本文涵盖四大类核心技术知识。加密算法部分介绍了对称加密(如 AES)、非对称加密(如 RSA)、哈希摘要(如 SHA-2)、签名算法的特点及密码存储方案(加盐、BCrypt 等)。 排序算法部分分类讲解了比较排序(冒泡、选择、插入、归并、快排、堆排序)和非比较排序(计数、桶、基数排序)的时间复杂度、适用场景及实现思路,强调混合排序的工业应用。 字符串处理部分包括字符串反转的双指针法,及项目中用正则进行表单校验、网页爬取、日志处理的实例。 搜索算法部分详解了二分查找的实现(双指针与中间索引计算)和回溯算法的概念(递归 + 剪枝),以 N 皇后问题为例说明回溯应用。内容全面覆盖算法原理与实践
这个AI把arXiv变成代码工厂,快速复现顶会算法!Paper2Code:AI论文自动转代码神器,多智能体框架颠覆科研复现
Paper2Code是由韩国科学技术院与DeepAuto.ai联合开发的多智能体框架,通过规划、分析和代码生成三阶段流程,将机器学习论文自动转化为可执行代码仓库,显著提升科研复现效率。
381 19
这个AI把arXiv变成代码工厂,快速复现顶会算法!Paper2Code:AI论文自动转代码神器,多智能体框架颠覆科研复现
18个常用的强化学习算法整理:从基础方法到高级模型的理论技术与代码实现
本文系统讲解从基本强化学习方法到高级技术(如PPO、A3C、PlaNet等)的实现原理与编码过程,旨在通过理论结合代码的方式,构建对强化学习算法的全面理解。
193 10
18个常用的强化学习算法整理:从基础方法到高级模型的理论技术与代码实现
近端策略优化(PPO)算法的理论基础与PyTorch代码详解
近端策略优化(PPO)是深度强化学习中高效的策略优化方法,广泛应用于大语言模型的RLHF训练。PPO通过引入策略更新约束机制,平衡了更新幅度,提升了训练稳定性。其核心思想是在优势演员-评论家方法的基础上,采用裁剪和非裁剪项组成的替代目标函数,限制策略比率在[1-ϵ, 1+ϵ]区间内,防止过大的策略更新。本文详细探讨了PPO的基本原理、损失函数设计及PyTorch实现流程,提供了完整的代码示例。
2161 10
近端策略优化(PPO)算法的理论基础与PyTorch代码详解
JavaScript 中通过Array.sort() 实现多字段排序、排序稳定性、随机排序洗牌算法、优化排序性能,JS中排序算法的使用详解(附实际应用代码)
Array.sort() 是一个功能强大的方法,通过自定义的比较函数,可以处理各种复杂的排序逻辑。无论是简单的数字排序,还是多字段、嵌套对象、分组排序等高级应用,Array.sort() 都能胜任。同时,通过性能优化技巧(如映射排序)和结合其他数组方法(如 reduce),Array.sort() 可以用来实现高效的数据处理逻辑。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
分享一些提高二叉树遍历算法效率的代码示例
这只是简单的示例代码,实际应用中可能还需要根据具体需求进行更多的优化和处理。你可以根据自己的需求对代码进行修改和扩展。
223 64
C 语言递归算法:以简洁代码驾驭复杂逻辑
C语言递归算法简介:通过简洁的代码实现复杂的逻辑处理,递归函数自我调用解决分层问题,高效而优雅。适用于树形结构遍历、数学计算等领域。
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
198 1
通过优化算法和代码结构来提升易语言程序的执行效率
通过优化算法和代码结构来提升易语言程序的执行效率
202 2

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等