《算法笔记》3.6小节字符串处理问题 C: 字符串的查找删除
作者:互联网
问题 C: 字符串的查找删除
时间限制 : 1.000 sec 内存限制 : 32 MB
题目描述
给定一个短字符串(不含空格),再给定若干字符串,在这些字符串中删除所含有的短字符串。
输入
输入只有1组数据。
输入一个短字符串(不含空格),再输入若干字符串直到文件结束为止。
输出
删除输入的短字符串(不区分大小写)并去掉空格,输出。
样例输入
in
#include
int main()
{
printf(" Hi ");
}
样例输出
#clude
tma()
{
prtf("Hi");
}
提示
注:将字符串中的In、IN、iN、in删除。
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char a[400];
char delete_char[400];
char ans[400];
int counter = 0;
bool flag = true;
while (gets(a)) {
counter++;
int len = strlen(a);
int len_ans = 0;
int delete_len = strlen(delete_char);
if (counter == 1) {
int i = 0;
for (i = 0; i < len; ++i) {
if (isalpha(a[i]) and islower(a[i]))
a[i] -= 32;
delete_char[i] = a[i];
}
} else {
for (int i = 0; i < len; ++i) {
if (a[i] == ' ') {
for (int j = i + 1; j < len; ++j) {
a[j - 1] = a[j];
}
a[len - 1] = '\0';
}
}
for (int i = 0; i < len; ++i) {
flag = true;
if (len > delete_len + i) {
for (int j = i; j < delete_len + i; ++j) {
char ans_char = a[j];
if (islower(ans_char)) {
ans_char -= 32;
}
if (delete_char[j - i] != ans_char) {
flag = false;
break;
}
}
} else
flag = false;
if (flag) {
i = i + delete_len - 1;
} else {
ans[len_ans] = a[i];
len_ans++;
}
}
ans[len_ans] = '\0';
puts(ans);
}
}
return 0;
}
标签:char,int,小节,len,3.6,ans,字符串,delete 来源: https://blog.csdn.net/DoMoreSpeakLess/article/details/117306330