题目描述
给定一个短字符串(不含空格),再给定若干字符串,在这些字符串中删除所含有的短字符串。
输入
输入只有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;
}
本题疑问:当使用scanf函数读取短字符,则无法AC,而gets函数则可以通过;
如果有大神知道为何,希望不吝赐教;