要求:
键盘输入母串s1与子串s2,删除s1中所有的子串s2。
#include
#include
void re(char str1[],char str2[])
{
int i,j,flag,n=0;
for(i=0;str1[i]!=0;i++)
{
flag=0;
for(j=0;str2[j]!=0;j++)
if(str1[i]==str2[j])
{
flag=1;
break;
}
if(!flag)
str1[n++]=str1[i];
}
str1[n]=0;
}
int main()
{
char str1[40],str2[40];
scanf("%s%s",str1,str2);
re(str1,str2);
puts(str1);
return 0;
}
我输入abc ,要求删除ab,结果是c 这个运行正常
但我要是输入aba 要求删除ab,按理说结果是就剩下一个a
但实际运行结果 是都删除了,求解
你这里删除str1中的字符是有问题的,你的判断仅仅只是当str1与str2中一个字符相等的时候就删除str1中对应的字符。
既然是删除str1中包含str2的所有子串,则是str1与str2相同的部分删除(包含字符串的长度),而不是一个字符一个字符的比较删除。
语言表达不怎么好。
strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。
void rs(char str1[] , char str2[]){
int i,j,flag ;
for(i = 0 ;str1[i] != '\0' ;){
flag = i;
for(j = 0;str2[j] != '\0';j ++){
if(str1[flag] == str2[j]){
flag ++;
}else{
flag = -1;
break;
}
}
if(flag - i != j){ //字符串不匹配
i++;
}else{
int k = i;
while(k < flag && str1[flag] != '\0'){
str1[k++] = str1[flag++];
}
str1[k] = '\0';
}
}