- 题目描述:
-
给定一个短字符串(不含空格),再给定若干字符串,在这些字符串中删除所含有的短字符串。
- 输入:
-
输入只有1组数据。
输入一个短字符串(不含空格),再输入若干字符串直到文件结束为止。
- 输出:
-
删除输入的短字符串(不区分大小写)并去掉空格,输出。
- 样例输入:
-
in #include int main() { printf(" Hi "); }
- 样例输出:
-
#clude tma() { prtf("Hi"); }
- 提示:
-
注:将字符串中的In、IN、iN、in删除。
1 #include <iostream> 2 #include<string.h> 3 #include<cstdio> 4 using namespace std; 5 6 int main() 7 { 8 char str[101]; 9 gets(str); 10 string a=str; 11 for(int i=0;i<a.size();i++) 12 a[i]=tolower(a[i]); 13 while(gets(str)){ 14 string b=str,c=b; 15 for(int i=0;i<b.size();i++) 16 b[i]=tolower(b[i]); 17 int t=b.find(a,0); 18 while(t!=string::npos){ 19 c.erase(t,a.size()); 20 b.erase(t,a.size());//这里之所以还要用一个b是为了查询,即c是初始字符串,b是用来查询位置的
//这里的erase是第一种用法。 21 t=b.find(a,t); 22 } 23 t=c.find(‘ ‘,0); 24 while(t!=string::npos){ 25 c.erase(t,1); 26 t=c.find(‘ ‘,0); 27 } 28 cout << c << endl; 29 } 30 return 0; 31 }这个代码主要是几个函数的使用:
1.gets函数:读入输入中一整行的数据保存在str中
2.tolower函数:a中字符全部改成小写
3.find函数:前一个参数是配对字符串,后一个参数是查找开始下标。如果能找到,返回第一次出现的下标;如果不能找到,返回string::npos
4.erase函数:有三种用法:
(1)erase(pos,n); 删除从pos开始的n个字符,比如erase(0,1)就是删除第一个字符
(2)erase(position);删除position处的一个字符(position是个string类型的迭代器)
(3)erase(first,last);删除从first到last之间的字符(first和last都是迭代器)