《C程序设计语言》 练习2-4
问题描述
重新编写函数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的更多相关文章
- 操作系统和程序设计语言的API使用的字符编码分析
1.Java的运行环境中,String是什么编码? 使用java做程序设计语言,字符编码是和jvm相关的,和操作系统无关. java默认的编码是jvm在安装的时候就确定了的,它是根据你的系统的环境确 ...
- python程序设计语言笔记 第一部分 程序设计基础
1.1.1中央处理器(CPU) cpu是计算机的大脑,它从内存中获取指令然后执行这些指令,CPU通常由控制单元和逻辑单元组成. 控制单元用来控制和协调除cpu之外的其他组件的动作. 算数单元用来完成数 ...
- 扩展《C程序设计语言》练习2-3程序通用性
最近开始自学C语言,在看K&R的<C程序设计语言>.练习2-3要求写一个函数,将输入的十六进制数字字符串转换成与之等价的整数值,配套答案没有扩展程序的通用性,所以我就稍微改造改造. ...
- 清风注解-Swift程序设计语言:Point11~15
目录索引 清风注解-Swift程序设计语言 Point 11. 数值型字面量 代码事例: let decimalInteger = // 十进制的17 let binaryInteger = 0b10 ...
- 清风注解-Swift程序设计语言:Point6~10
目录索引 清风注解-Swift程序设计语言 Point 6. 输出常量和变量 代码事例: // 输出的内容会在最后换行 println("hello, world") // 输出的 ...
- 清风注解-Swift程序设计语言:Point1~5
目录索引 清风注解-Swift程序设计语言 Point 1. Swift 风格的"Hello, world" 代码事例: println("Hello, world&qu ...
- 清风注解-Swift程序设计语言
前言 Apple 发布了全新的 Swift 程序设计语言,用来开发 iOS 和 OS X 平台的应用程序.其目的不言而喻:就是为了给老迈的 Objective-C 一个合适接班人!因此,不难预见,未来 ...
- C程序设计语言(第二版)习题:第一章
第一章虽然感觉不像是个习题.但是我还是认真去做,去想,仅此而已! 练习 1-1 Run the "hello, world" program on your system. Exp ...
- Oberon程序设计语言简介
Oberon奥伯龙是一种通用编程语言,也是一种同名操作系统(由Oberon语言开发,且参考过贝尔实验室的新一代网络操作系统Plan9),是由原Pascal程序设计语言的发明者Niklaus Wirth ...
- awk程序设计语言之-awk基础
awk程序设计语言之-awk基础 http://man.linuxde.net/ 常用工具命令之awk命令 awk是一种编程语言,用于在Linux/Unix下对文本和数据处理.数据可以来自标准输入(s ...
随机推荐
- yum 下载全量依赖 rpm 包及离线安装(终极解决方案)
目录 简介 验证环境 查看依赖包 方案一(推荐):repotrack 方案二:yumdownloader 方案三:yum 的 downloadonly 插件 离线安装 rpm 参考资料 简介 通常生产 ...
- 搞懂 XML 解析,徒手造 WEB 框架
恕我斗胆直言,对开源的 WEB 框架了解多少,有没有尝试写过框架呢?XML 的解析方式有哪些?能答出来吗?! 心中没有答案也没关系,因为通过今天的分享,能让你轻松 get 如下几点,绝对收获满满. a ...
- Extjs更新grid
基于Extjs4.2 原理是创建一个新的store,来覆盖原有的store. //创建数据 var newdatas = { name: "ly", age: 17, adress ...
- App的数据如何用python抓取
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. App中的数据可以用网络爬虫抓取么 答案是完全肯定的:凡是可以看到的APP数 ...
- E. 蚂蚁和斐波那契
单点时限: 1.0 sec 内存限制: 512 MB 聪明的小蚂蚁最近学习了斐波那契数列,但是它想到了一个问题:从L到R之间斐波那契数列和的奇偶是什么呢?其中Fib[1]=1,Fib[2]=1 . 输 ...
- Python——详解__slots__,property和私有方法
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题的第11篇文章,我们来聊聊面向对象的一些进阶使用. __slots__ 如果你看过github当中一些大牛的代码,你会 ...
- Springboot:员工管理之删除员工及退出登录(十(9))
springboot2.2.6 delete请求报错,降至2.1.11功能可用 原因未知 构建员工删除请求 com\springboot\controller\EmployeeController.j ...
- python 工具链 多版本管理工具 pyenv
理解Shims pyenv会在系统的PATH最前面插入一个shims目录: $(pyenv root)/shims:/usr/local/bin:/usr/bin:/bin 通过一个rehashing ...
- kubernetes的Statefulset介绍
StatefulSet是一种给Pod提供唯一标志的控制器,他可以保证部署和扩展的顺序. Pod一致性 包含次序(启动和停止次序).网络一致性.此一致性和Pod相关.与被调度到哪个Node节点无关. 稳 ...
- js判断一个元素是否在数组内
1.indexOf()返回给定元素在数组内的索引值,如果不存在则返回-1 var arr=[0,1,2,3,4,5] console.log(arr.indexOf(1)) console.log(a ...