问题描述

  重新编写函数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. App的数据如何用python抓取

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. App中的数据可以用网络爬虫抓取么 答案是完全肯定的:凡是可以看到的APP数 ...

  2. Python程序设计 实验 1 熟悉 IDLE 和在线编程平台

    ------------恢复内容开始------------ 安徽工程大学 Python程序设计 实验报告 班级   物流191   姓名  姚彩琴  学号3190505129 成绩 日期     2 ...

  3. springboot集成JdbcTemplate+druid

    application.yml datasource: username: root password: root url: jdbc:mysql://localhost:3306/early_war ...

  4. 判断一个字符串是否是合法IP地址

    # -*- coding: utf-8 -*- """ @File:test06_判断ip地址是否合法.py @E-mail:364942727@qq.com @Time ...

  5. Matlab学习-(3)

    1. 二维图 绘制完图形以后,可能还需要对图形进行一些辅助操作,以使图形意义更加明确,可读性更强. 1.1 图形标注 title(’图形名称’) (都放在单引号内)xlabel(’x轴说明’)ylab ...

  6. 关于JS垃圾回收机制

    一.垃圾回收机制的必要性 由于字符串.对象和数组没有固定大小,所以当它们的大小已知时,才能对它们进行动态的存储分配.JavaScript程序每次创建字符串.数组或对象时,解释器都必须分配内存来存储那个 ...

  7. 痞子衡嵌入式:简析i.MXRT1170 Cortex-M4 L-MEM ECC功能特点、开启步骤、性能影响

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是恩智浦i.MXRT1170上Cortex-M4内核的L-MEM ECC功能. 本篇是 <简析i.MXRT1170 Cortex-M ...

  8. Java中StringBuffer类

    StringBuffer: 线程安全的可变字符串. StringBuffer和String的区别?前者长度和内容可变,后者不可变.如果使用前者做字符串的拼接,不会浪费太多的资源. StringBuff ...

  9. Docker 中如何安装配置 Nginx

    拉取 nginx 最新版镜像,然后简单启动一个 nginx 容器: docker pull nginx:latest docker run --name nginx01 -d -p 80:80 ngi ...

  10. [wp]xctf newscenter

    手工注入 查询所有数据库名称和表名 ' union select 1,table_schema,table_name from information_schema.tables# 发现就两个数据库i ...