题目描述
给定一个短字符串(不含空格),再给定若干字符串,在这些字符串中删除所含有的短字符串。
输入
输入只有1组数据。
输入一个短字符串(不含空格),再输入若干字符串直到文件结束为止。
输出
删除输入的短字符串(不区分大小写)并去掉空格,输出。
样例输入
in
#include
int main()
{
printf(" Hi ");
}
样例输出
#clude
tma()
{
prtf("Hi");
}
提示
注:将字符串中的In、IN、iN、in删除。
思路:
本题的难点在于如何不区分大小写进行删除,此处使用string容器中find()来找子串,并将子串和主串利用tolower()先行小写化进行匹配,再在原串中使用erase()进行删除。
代码:
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int main() {
char str[200];
gets_s(str);
string deletestr = str;
for (int i = 0; i < deletestr.size(); i++) {
deletestr[i] = tolower(deletestr[i]);
}
while (gets_s(str)) {
for (int i = 0, j = 0; i <= strlen(str); i++) {
if (str[i] != ' ')
str[j++] = str[i];
}
string str_str = str;
string temp = str_str;
for (int i = 0; i < temp.size(); i++) {
temp[i] = tolower(temp[i]);
}
size_t pos = 0;
do
{
pos = temp.find(deletestr, pos);
if (pos != string::npos) {
temp.erase(pos, deletestr.size());
str_str.erase(pos, deletestr.size());
}
} while (pos != string::npos);
cout << str_str << endl;
}
return 0;
}