题目描述
给定一个短字符串(不含空格),再给定若干字符串,在这些字符串中删除所含有的短字符串。
输入
输入只有1组数据。
输入一个短字符串(不含空格),再输入若干字符串直到文件结束为止。
输出
删除输入的短字符串(不区分大小写)并去掉空格,输出。
样例输入
in
#include
int main()
{
printf(" Hi ");
}
样例输出
#clude
tma()
{
prtf("Hi");
}
提示
注:将字符串中的In、IN、iN、in删除。
1 #include <iostream> 2 #include <vector> 3 #include <string> 4 using namespace std; 5 6 int main(){ 7 string del_str; 8 getline(cin, del_str); 9 unsigned long del_len = del_str.size(); 10 for(size_t i = 0; i < del_len; i++) if(isupper(del_str[i])) del_str[i] += 32; 11 string kong(del_len,' '); 12 13 string ans_str; 14 vector<int> upper_idxs; 15 vector<int>::iterator it; 16 17 while(getline(cin, ans_str)){ 18 unsigned long t = ans_str.find(' ', 0); 19 while(t != string::npos){ 20 ans_str.erase(t, 1); 21 t = ans_str.find(' ', t); 22 } 23 24 unsigned long ans_len = ans_str.size(); 25 for(int i = 0; i < ans_len; i++){ 26 if(isupper(ans_str[i])){ 27 ans_str[i] += 32; 28 upper_idxs.push_back(i); 29 } 30 } 31 32 t = ans_str.find(del_str, 0); 33 while(t != string::npos){ 34 ans_str.replace(t, del_len, kong); 35 for(unsigned long j = t; j < t + del_len; j++){ 36 for(it = upper_idxs.begin(); it != upper_idxs.end(); it++){ 37 if(*it == j) upper_idxs.erase(it); 38 } 39 } 40 t = ans_str.find(del_str, t); 41 } 42 for(it = upper_idxs.begin(); it != upper_idxs.end(); it++) ans_str[*it] -= 32; 43 44 t = ans_str.find(' ', 0); 45 while(t != string::npos){ 46 ans_str.erase(t, 1); 47 t = ans_str.find(' ', t); 48 } 49 cout << ans_str << endl; 50 upper_idxs.clear(); 51 } 52 return 0; 53 }