codeup.字符串的查找删除
编辑:谯胜平 分类:程序与算法 标签:codeup,字符串处理 发布时间:2019-02-24 浏览次数:1573次
题目描述
给定一个短字符串(不含空格),再给定若干字符串,在这些字符串中删除所含有的短字符串。
输入
输入只有1组数据。
输入一个短字符串(不含空格),再输入若干字符串直到文件结束为止。
输出
删除输入的短字符串(不区分大小写)并去掉空格,输出。
样例输入
in #include int main() { printf(" Hi "); }
样例输出
#clude tma() { prtf("Hi"); }
提示
注:将字符串中的In、IN、iN、in删除。
一、分析
基本思路是,使用gets或者scanf+getchar进行读取短字符串,因为scanf函数不会读取也不会去掉末尾的换行符,因此用scanf时还需要getchar(目的是去读单个字符)。
每次输入的长字符串使用gets进行读取,然后遍历读取的长字符串,使用短字符串的第一个字符与其进行比对,如果“相等”则将长字符串的相应位置置为空格(最后输出时跳过空格即可),如果匹配的话就继续往下比较,直到匹配的字符个数等于短字符串长度,则跳出内层循环,进行下一轮匹配,直到遍历完整个长字符串。
我判断字符是否相等的方法是使用绝对值函数(abs(a - b) == 32 || a == b),网上有人说将其转化成小写,我觉得完全没必要。
之前一直过不了,codeup上面显示运行“运行错误50%”,后来才发现时数组开小了。
二、代码
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> int Equal(char a, char b) { //通过a和b的绝对值判断两个字母是否“相等” if (abs(a - b) == 32 || a == b) return 1; else return 0; } int main() { char c[1000], b[1000]; gets(c); while (gets(b) != NULL) { int len = strlen(b); for (int i = 0; i < len; i++) { //如果b字符串中有字符和c[0]相等的字符就开始匹配 if (Equal(b[i], c[0])) { int j = 1; i++; //b的下标加1 while (j < strlen(c) && Equal(b[i], c[j])) { i++; j++; } //表示匹配成功,将b中匹配到的部分置为空格 if (j == strlen(c)) { for (int k = i - j; k < i; k++) { b[k] = ' '; } } i--; } } //去除空格输出 for (int i = 0; i < len; i++) { if (b[i] != ' ') { printf("%c", b[i]); } } printf("\n"); } return 0; }
热门文章
文章标签
- 考研经验(10)
- 计算机考研(8)
- 408(1)
- 数学一(1)
- codeup(4)
- 字符串处理(5)
- web(3)
- 学科评估(2)
- scanf(2)
- gets(1)
- getchar(1)
- sublime text(2)
- java(1)
- 五子棋(1)
- printf(1)
- 最大公约数(1)
- 最小公倍数(1)
- mysql(1)
- 作息时间(2)
- STL(1)
- PAT(2)
- 富文本编辑器(1)
- 数据类型(1)
- 完全二叉树(1)
- 闰月(1)
- 晴天的魔法乐园(6)
- 递归(1)
- 棋盘覆盖问题(1)
- PPT模板(1)
- 谷歌(1)
- unzip(1)
- gcc(1)
- ubuntu(1)
- getline()(1)
- 日历(1)
- 作息时间表(1)
友情链接