问题描述

  重新编写函数squeeze(s1,s2),将字符串s1中任何与字符串s2中字符匹配的字符都删除

  Write an alternate version of squeeze(s1,s2) that deletes each character in the string s1 that matches any character in the string s2 .

解题思路

  这里有两种思路:

  第一种就是将s1字符串的字符,一个一个的去和s2的全部字符对比,一旦发现有重复的,比如s1中的第5个字符与s2中的某个字符重复,我们就把s1中,从第六个字符(包括第六个)之后的全部字符往前移动一位,这样第五个字符就被覆盖了,如同被删除。

  第二种也是要对比两个字符串,举个例子来解释这种方法,

    例如s1中的第一个字符没有在s2中出现过,就将这个字符存到s1的第一个位置

    再对比s1中第二个字符,如果这个字符在s2中也有,那么就不做任何操作

    再对比s1中第三个字符,如果s2中没有这个字符,那么就将这个字符存进s1的第二个字符中

    以此类推,最后给s1的最后一个位置存一个'\0'

    其原理就是将不与s2重复的字符重新储存进s1中

方法一代码:

 #include<stdio.h>
#define MAXLEN 1024 void squeeze(char s1[] , char s2[]);
void getlines(char array[], int maxlen); int main()
{
char s1[MAXLEN],s2[MAXLEN];
getlines(s1,MAXLEN);
getlines(s2,MAXLEN);
squeeze(s1,s2);
printf("%s",s1);
return ;
} void squeeze(char s1[] , char s2[])
{
int i=,j=;
for ( i = ; s1[i]!='\0'; i++)
{
for ( j=; s2[j]!='\0'; j++)
{
if (s1[i]==s2[j])
{
int k=i;
while (s1[k]!='\0')
{
s1[k]=s1[k+];
k++;
}
j=-;
s1[k]='\0';
}
}
}
}
void getlines(char array[], int maxlen)
{
int c,i;
for ( i = ; i < maxlen- && (c=getchar())!=EOF&&c!='\n'; i++)
{
array[i] = c;
}
if (c=='\n')
{
array[i++] = c;
}
array[i] = '\0';
}

方法二代码:

#include<stdio.h>
#define MAXLEN 100 void getlines(char array[],char maxlen)
{
int i,c;
for ( i = 0; i < maxlen-1 &&(c=getchar())!=EOF && c!='\n'; i++)
{
array[i] = c;
}
if (c=='\n')
{
array[i]=c;
i++;
}
array[i]='\0';
}
void squeeze(char s1[], char s2[])
{
int i, j, k; for (i = k = 0; s1[i] != '\0'; i++)
{
for (j = 0; s2[j] != '\0' && s2[j] != s1[i]; j++)
{
;
}
if (s2[j] == '\0')
{
s1[k++] = s1[i];
}//如果s1的某个字符,与s2整个字符串都不相同,就会把s2遍历到最后,使s2[j] == '\0'
//就会执行上面这个if语句
//如果在遍历s2时,中间出现一个与s1相同的,for跳出,if不满足跳出,就什么都不执行,这个重复的值不执行拷贝,也就相当于被删除了
}
s1[k] = '\0';
}
int main()
{
char s1[MAXLEN];
char s2[MAXLEN]; getlines(s1,MAXLEN);
getlines(s2,MAXLEN); squeeze(s1,s2);
printf("%s",s1);
return 0;
}

  

执行结果

欢迎大家关注我的微信公众号:农大CPU

  

《C程序设计语言》 练习2-4的更多相关文章

  1. 操作系统和程序设计语言的API使用的字符编码分析

     1.Java的运行环境中,String是什么编码? 使用java做程序设计语言,字符编码是和jvm相关的,和操作系统无关. java默认的编码是jvm在安装的时候就确定了的,它是根据你的系统的环境确 ...

  2. python程序设计语言笔记 第一部分 程序设计基础

    1.1.1中央处理器(CPU) cpu是计算机的大脑,它从内存中获取指令然后执行这些指令,CPU通常由控制单元和逻辑单元组成. 控制单元用来控制和协调除cpu之外的其他组件的动作. 算数单元用来完成数 ...

  3. 扩展《C程序设计语言》练习2-3程序通用性

    最近开始自学C语言,在看K&R的<C程序设计语言>.练习2-3要求写一个函数,将输入的十六进制数字字符串转换成与之等价的整数值,配套答案没有扩展程序的通用性,所以我就稍微改造改造. ...

  4. 清风注解-Swift程序设计语言:Point11~15

    目录索引 清风注解-Swift程序设计语言 Point 11. 数值型字面量 代码事例: let decimalInteger = // 十进制的17 let binaryInteger = 0b10 ...

  5. 清风注解-Swift程序设计语言:Point6~10

    目录索引 清风注解-Swift程序设计语言 Point 6. 输出常量和变量 代码事例: // 输出的内容会在最后换行 println("hello, world") // 输出的 ...

  6. 清风注解-Swift程序设计语言:Point1~5

    目录索引 清风注解-Swift程序设计语言 Point 1. Swift 风格的"Hello, world" 代码事例: println("Hello, world&qu ...

  7. 清风注解-Swift程序设计语言

    前言 Apple 发布了全新的 Swift 程序设计语言,用来开发 iOS 和 OS X 平台的应用程序.其目的不言而喻:就是为了给老迈的 Objective-C 一个合适接班人!因此,不难预见,未来 ...

  8. C程序设计语言(第二版)习题:第一章

    第一章虽然感觉不像是个习题.但是我还是认真去做,去想,仅此而已! 练习 1-1 Run the "hello, world" program on your system. Exp ...

  9. Oberon程序设计语言简介

    Oberon奥伯龙是一种通用编程语言,也是一种同名操作系统(由Oberon语言开发,且参考过贝尔实验室的新一代网络操作系统Plan9),是由原Pascal程序设计语言的发明者Niklaus Wirth ...

  10. awk程序设计语言之-awk基础

    awk程序设计语言之-awk基础 http://man.linuxde.net/ 常用工具命令之awk命令 awk是一种编程语言,用于在Linux/Unix下对文本和数据处理.数据可以来自标准输入(s ...

随机推荐

  1. G - Harmonic Number (II) LightOJ - 1245

    算是一个找规律的题目吧. 枚举前sqrt(n)个数,数i出现的次数为n/i-n/(i+1),对答案的贡献为(n/i-n/(i+1))*i. 对于sqrt后边的数,可以直接由n/i获得,并且一定只出现一 ...

  2. 详解 LinkedHashMap

    同学们可能在看到这个类的时候就明白了很多关于这个类的特点,那么,本人就在这里来啰嗦一下,再来介绍下这个类: (有关Map集合的基本性质,请观看本人博文-- <详解 Map集合>) Link ...

  3. Jmeter--Plugins Manager安装及常用的插件介绍

    jmeter 客户端 内置的插件管理工具Plugins Manager 1.下载地址:https://jmeter-plugins.org/install/Install/ 2.将下载的文件拷贝的你的 ...

  4. python 获取的json字符串取值

    获取到的json字符串,然后对其取值 {u'result': {u'10.10.10.100': {u'status': u'OK', u'msg': u"{'listen': {'': s ...

  5. js判断一个元素是否在数组内

    1.indexOf()返回给定元素在数组内的索引值,如果不存在则返回-1 var arr=[0,1,2,3,4,5] console.log(arr.indexOf(1)) console.log(a ...

  6. Configure Visual Studio with UNIX end of lines

    As OP states "File > Advanced Save Options", select Unix Line Endings. https://stackove ...

  7. MySql id 设定为主键不自增后,再给 sort 字段增加自增属性

    需求 id 已经被设置为主键,但是没有给它设置 自增 属性.sort 起到一个排序的作用,需要给它设置一个 自增 属性 加自增属性的前提 表中的属性没有增加自增 赋予自增属性的字段,必须带有 索引 S ...

  8. hdu_2391 Filthy Rich DP

    Filthy Rich Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  9. js之用IndexOf返回指定字符串的次数

    代码 var Str = "strs,strs,stras,str,strs,strs"; var subStr ="strs" ; var count = 0 ...

  10. 每天认识几个HTTP 响应码

    HTTP 响应状态代码指示特定 HTTP 请求是否已成功完成. 1xx信息响应 1xx 的响应结果表明接收的请求正在处理 2xx成功响应 2XX 的响应结果表明请求被正常处理了 3xx重定向 3xx ...