1808 Problem C:字符串的查找删除

题目描述

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

输入

输入只有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函数则可以通过;

如果有大神知道为何,希望不吝赐教;

阅读更多
个人分类: Code up
上一篇1805 Problem B:首字母大写
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭