题目描述
给定一个短字符串(不含空格),再给定若干字符串,在这些字符串中删除所含有的短字符串。
输入
输入只有1组数据。
输入一个短字符串(不含空格),再输入若干字符串直到文件结束为止。
输出
删除输入的短字符串(不区分大小写)并去掉空格,输出。
样例输入
in
#include
int main()
{
printf(" Hi ");
}
样例输出
#clude
tma()
{
prtf("Hi");
}
提示
注:将字符串中的In、IN、iN、in删除。
思路:注意题中输入多个字符串,故用二维数组来记录输入。提示中表示大写小写混合组合都需删除,故直接将所有字母统一大小写。查找短字符串就用最简单的字符匹配算法。
#include <cstdio>
#include <cstring>
char del[1000], str[1001][1001], ans[1001][1001];
int main() {
int index = 0;
gets(del);
int len1 = strlen(del);
while (gets(str[index++]));//用二维数组记录多个输入字符串
for (int i = 0; i < len1; i++) {//将短字符串全部转化为小写字母
if (del[i] >= 'A' && del[i] <= 'Z') {
del[i] = del[i] - 'A' + 'a';
}
}
for (int i = 0; i < index; i++) {//遍历所有输入字符串
int len2 = strlen(str[i]);
for (int j = 0; j < len2; j++) {
ans[i][j] = str[i][j];//用另一个二维数组存储每个字符串
if (str[i][j] >= 'A' && str[i][j] <= 'Z') {//将原字符串转化为小写字母
str[i][j] = str[i][j] - 'A' + 'a';
}
}
for (int j = 0, k = 0; j < len2;) {
if (str[i][j + k] == del[k]) {//判断是否与短字符第一个字符相同
k++;
if (k == len1) {//若完全相同则跳过
j = j + k;
k = 0;
}
} else {
if (str[i][j] != ' ') {
printf("%c", ans[i][j]);//去掉空格并输出原字符;
}
j++;
k = 0;
}
}
printf("\n");
}
return 0;
}
转载:link