MOOC 题目内容:
输入2个字符串S1和S2,要求删除字符串S1中出现的所有子串S2,即结果字符串中不能包含S2。
提示:输入数据的设计使得不可能出现输出为空的情况。
输入格式:
输入分别给出2个每个不超过100个字符长度的不带空格的非空字符串,对应S1和S2,以空格分开。
输出格式:
在一行中输出删除字符串S1中出现的所有子串S2后的结果字符串。
输入样例:
Thisisatest is
输出样例:
Thatest
时间限制:500ms内存限制:32000kb
<C 代码>
#include <stdio.h>
#define N 100
/**
删除在长串中指定的字符串。
str1: 长串地址
str2: 指定字符串地址
str: 结果字符串地址
**/
void deleteSub(const char * str1, const char * str2, char * str)
{
// 变量,用于各自数组下标
int idx1 = 0;
int idx2 = 0;
int idx = 0;
// 遍历str1数组,匹配是否与str2数组相同。
while(str1[idx1] != '\0')
{
while(str2[idx2] != '\0')
{
// 相同情况,str1 和 str2 下标自增,直到满足全部相同,此时将 str2 下标置0,匹配str1 之后的元素
// 不相同时,直接跳出匹配,进行str1 下一元素匹配,并且将不匹配元素存入str 中。
if(str2[idx2] == str1[idx1])
{
idx1 ++;
idx2 ++;
if(str2[idx2] == '\0')
{
idx2 = 0;
break;
}
}
else
{
idx2 = 0;
str[idx]=str1[idx1];
idx ++;
idx1 ++;
break;
}
}
}
//字符串结束
str[idx]='\0';
}
int main(void)
{
char str[N],substr[N],resultstr[N];
scanf("%s %s",str,substr);
deleteSub(str,substr,resultstr);
printf("%s",resultstr);
return 0;
}