原题链接:字符串的查找删除
通过直接应用string容器的find和erase库函数,进行定位删除操作
1、审题
审题很重要,本人读完几遍题目,没注意题目里面细节,按着我自己想法来写,没有审题,忽略了括号里面的不区分大小写,导致提交后一直答案50,耗费大量时间找错误之处
- 题所述给定一个短字符串(不含空格),再给定若干字符串,在这些字符串中删除所含有的短字符串。
- 输入只有1组数据。 输入一个短字符串(不含空格),再输入若干字符串直到文件结束为止。
- 删除输入的短字符串(不区分大小写)并去掉空格,输出。
通过读题可以知道,3点:
第一,我们需要对字符串进行删除操作;
第二、需要进行删除操作的字符串要进行循环输入,直到控制窗输入ctrl+Z结束循环(windows);
第三、删除的算法不需要区分里面的大小写,去掉空格
2、流程图
3、部分函数简要介绍
getchar();//这里用于吃掉空格,由于cin直接在缓冲区读取数据,但是遇到空格、tab、换行字符就会停止读取数据,剩下的字符就会暂存在缓冲区,这样就留下了空格以及后面的字符,防止空格在输入缓冲区影响后面的输入,我们这里使用getchar能够把缓冲区空格形象的吃掉
geline(cin,str);//str为字符串,getline函数可以读取整行,包括空格和tab,并将其存储在字符串对象中,遇空格结束输入
s.find(str,pos);//查找字符串str在当前字符串s的额[pos,end]中 **第一次** 出现的位置
//返回值为一个整型数据,若无此字符串返回-1
s.erase(pos,n);//把字符串s从pos位置开始的n个字符删除,返回为一个字符串
//find还有其他的重载,读者需要可以自行查阅
4、代码区
#include<iostream>
#include<string>
using namespace std;
//给定一个短字符串(不含空格),再给定若干字符串,在这些字符串中删除所含有的短字符串。
//输入只有1组数据。
//输入一个短字符串(不含空格),再输入若干字符串直到文件结束为止。
int main()
{
string s, key,s_small,key_small;
//s为要进行删除操作的字符串,key为标记字符串,s_small,key_small分别为其对应小写
cin >> key;
char c=getchar();
//把key字符串全部变成小写
//注意!!!需先对key_small进行定义大小操作!!!否则会报错
key_small.resize(key.size());
for (int i = 0; i < key.size(); i++)
{
if (key[i] > 'A' && key[i] < 'Z')
{
key_small[i] = 32+key[i];
}
else
{
key_small[i] = key[i];
}
}
//标记字符串大小
int sizeofk = key.size();
//删除指定字符(不区分大小写)
while (getline(cin, s))//直到遇到文字结束符结束循环(windous下为ctrl+z)
{
//把s字符串全部变小写
s_small.resize(s.size());
for (int i = 0; i < s.size(); i++)
{
if (s[i] > 'A' && s[i] < 'Z')
{
s_small[i] = 32 + s[i];
}
else
{
s_small[i] = s[i];
}
}
//初始化 标记查找的位置
int fpos = 0;
//通过while循环,一个一个的find到标记字符串位置fpos,一个一个通过fpos进行删除
while (s_small.find(key_small, fpos) != -1)
{
fpos = s_small.find(key_small, fpos);
//删除操作
//同步删除
s = s.erase(fpos, sizeofk);
s_small = s_small.erase(fpos, sizeofk);
}
//若需要区分大小写,则只需要进行如下代码即可(此时:不需要定义key_small,s_small字符串容器)
//while (s.find(key, fpos) != -1)
//{
// fpos = s.find(key, fpos);
// s = s.erase(fpos, sizeofk);
//}
//只输出不含空格字符
for (int i = 0; i < s.size(); i++)
{
if (s[i] != ' ')
{
cout << s[i];
}
}
cout << endl;
}
system("pause");
return 0;
}
9.9 分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复