字符串的查找删除

题目描述

给定一个短字符串(不含空格),再给定若干字符串,在这些字符串中删除所含有的短字符串。

输入

输入只有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 }

猜你喜欢

转载自www.cnblogs.com/zhang716921/p/9687218.html