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

一、需求描述

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

例如,长字符串为“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”。

 

时间: 2024-08-01 03:41:40

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

一个字符串中出现次数最多的字符 统计这个次数【实现代码】_javascript技巧

var str = 'asdfssaaasasasasaa'; var json = {}; for (var i = 0; i < str.length; i++) { if(!json[str.charAt(i)]){ json[str.charAt(i)] = 1; }else{ json[str.charAt(i)]++; } }; var iMax = 0; var iIndex = ''; for(var i in json){ if(json[i]>iMax){ iMax = j

在字符串中删除特定的字符

转自:http://zhedahht.blog.163.com/blog/static/25411174200801931426484/ 题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符.例如,输入"They are students."和"aeiou",则删除之后的第一个字符串变成"Thy r stdnts.". 分析:这是一道微软面试题.在微软的常见面试题中,与字符串相关的题目占了很大的一部分,因为写程序操作字符串能很好的反映

c语言输入字符删除特定字符问题

问题描述 c语言输入字符删除特定字符问题 输入一行字符,要求删去其中的某个字符后输出,要删除的字符由键盘输入. 解决方案 #include#includevoid main(){ char s[81]; int in; printf(""input a string:""); gets(s); printf(""input n:""); scanf(""%d""&n); for(

ASP读取文本并在特定的字符后面写入一段字符串

ASP读取一个文本文件,然后在特定的字符后面写入一段字符串的示例代码:   set fso=CreateObject("Scripting.FileSystemObject")set f = fso.OpenTextFile(server.MapPath(文件路径))if not f.atendofstream then       content=f.ReadAllelse      content=""end iff.closeset f=nothing 内容保

php使用substr()和strpos()联合查找字符串中某一特定字符的方法

  本文实例讲述了php使用substr()和strpos()联合查找字符串中某一特定字符的方法.分享给大家供大家参考.具体分析如下: 要求:在下面的字符串中查找双竖线前面的字符,大多数清空下使用explode()函数,但项目过程中使用了太多的explode(),所以找到了下面的方法. ? 1 2 3 4 <?php $str="admin||46cc468df60c961d8da2326337c7aa58||0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

c语言 字符-从键盘输入任意一个字符串和一个字符,要求从该字符串中删除所有该字符。

问题描述 从键盘输入任意一个字符串和一个字符,要求从该字符串中删除所有该字符. 题目要求 Problem Description 从键盘输入任意一个字符串和一个字符,要求从该字符串中删除所有该字符. Input 输入有多组测试数据. 每组两行,第一行是字符串(字符串至少还有一个字符,不多于100个),第二行是一个字符 Output 每组输出一行,删除了所有应删除字符后的字符串 Sample Input ABCDE E ASD Dfg fhd D Sample Output ABCD AS fg

[华为上机练习题]7.删除字符串中出现次数最少的字符

题目 描述: 实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除.输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序. 题目类别: 字符串 难度: 中级 运行时间限制: 10Sec 内存限制: 128MByte 阶段: 入职前练习 输入: 字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节. 输出: 删除字符串中出现次数最少的字符后的字符串. 样例输入: abcdd 样例输出: dd 代码 /*------------------------

python 正则匹配到特定字符串,并删除字符串所在的行,并且返回所在行的第一个数字ID

问题描述 python 正则匹配到特定字符串,并删除字符串所在的行,并且返回所在行的第一个数字ID 如利用正则匹配到"受到xx影响",则删除字符串所在行,并返回2877,2881.a.txt内容如下:2877 a3 1-1 9:16部分地区受到雾霾影响出行不便. 2878 a2 1-1 9:42床前明月光,疑是地上霜.2880 a2 1-1 10:09举头望明月,低头思故乡.2881 a3 1-1 9:16受到事故影响出行不便. 希望得到的结果是:"2877"匹配到

stringbuffer-从键盘输入一个字符串和一个字符,从字符串中删除全部该字符(如果是字母,大小写都删除)

问题描述 从键盘输入一个字符串和一个字符,从字符串中删除全部该字符(如果是字母,大小写都删除) package lab; /** * @author Administrator */ import java.util.Scanner; public class Lab { /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application