题目描述
给定一个短字符串(不含空格),再给定若干字符串,在这些字符串中删除所含有的短字符串。
输入
输入只有1组数据。
输入一个短字符串(不含空格),再输入若干字符串直到文件结束为止。
输出
删除输入的短字符串(不区分大小写)并去掉空格,输出。
样例输入
in
#include
int main()
{
printf(" Hi ");
}
样例输出
#clude
tma()
{
prtf(“Hi”);
}
思路:
字符串查找删除首先我想到的是stl中自带的string函数,那么剩下要解决的就是不区分大小写删除了,由于find函数只能匹配完全一样的字符串,那么出发点就是统一主串和字串的形式:统一改成小写(大写)
AC代码:
#include<iostream>
#include<cstring>
using namespace std;
int main() {
string str; //短字符串
getline(cin,str);
int len=str.length();
for(int i=0;i<len;i++) //改成小写
str[i]=tolower(str[i]);
string a,b; //a是小写后的字符串用于查找,b是源字符串用于输出
int t;
while(getline(cin,a)){
b=a;
for(int i=0;i<a.length();i++) //改成小写
a[i]=tolower(a[i]);
//删str
t=a.find(str,0);
while(t!=string::npos){
b.erase(t,len);
a.erase(t,len);
t=a.find(str,t);
}
//删空格
t=a.find(' ',0);
while(t!=string::npos){
b.erase(t,1);
a.erase(t,1);
t=a.find(' ',t);
}
cout<<b<<endl;
}
//system("pause");
return 0;
}
总结:
1.复习了下tolower、find(字符串,起始位)、erase(位置,大小)函数
2.删除空格刚开始理解错了,以为是被删除的多下来的空格,下次看题目注意结合示例一起看