/*
分析:
意思就是只要s1中的字符s2中也含有就删除
*/
#include<stdio.h>
#include<string.h>
void Squ(char *s1,char *s2);
int main()
{
char s1[20],s2[20];
printf("请输入字符串s1:");
gets(s1);
printf("请输入字符串s2:");
gets(s2);
Squ(s1,s2);
printf("删除后的字符串为:%s\n",s1);
return 0;
}
void Squ(char *s1,char *s2)
{
int len1,len2;
len1=strlen(s1);
len2=strlen(s2);
int i,j,k;
int state=1;
for(i=0;i<len1;i++)
{
for(j=0;j<len2;j++) //这里主要是把s1的每一个字符都跟s2里的字符比较,一旦遇到相同的就跳出然后把这个给位置以后的字符都前移一个覆盖住这个字符
{
if(s1[i]==s2[j])
{
state=0; // 用来判断是否需要删除
break;
}
}
if(state==0)
{
for(k=i;k<len1-1;k++)
s1[k]=s1[k+1];
s1[k]='\0'; //这里注意要把末尾加上字符串结束符,因为我们虽然把字符删除了,但是字符串结束符还是在原来的位置
//,也就是说除非自己用for之类的循环输出,否则用%s和puts都会出错,不信你们可以把这行删除试试
len1--; //这里因为每删除一个字符字符串长度也会相应减少一个
state=1; //归零,用于下一次判断
i--; //这里因为把后面的都前移,也就是说原本的i位置的数变成了它后面一个数,如果不i--的话,下次循环就会漏掉他
}
}
}
编写函数Squ(s1,s2),把字符串中s1中的任何与字符串s2中的字符匹配的字符都删除
最新推荐文章于 2023-03-09 23:01:58 发布