#include stdio.h
创新互联公司自2013年起,是专业互联网技术服务公司,拥有项目网站设计、做网站网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元抚远做网站,已为上家服务,为抚远各地企业和个人服务,联系电话:18980820575
#includestdlib.h
#includestring.h
void squeeze(char* s1, const char* s2)
{
int i=0;
int j=0;
for(i=0; istrlen(s2); i++)
for(j=0; jstrlen(s1); j++)
{
if(s1[j]==s2[i])
{
s1[j]=' ';
//这里我把删除的字符用空格替换了,当然你也可以通过移位将后面的字符前移
}
}
}
int main()
{
char a[100], b[5];
scanf("%s%s",a,b);
printf("删除前:%s\n",a);
squeeze(a,b);
printf("删除后:%s\n",a);
system("pause");
return 0;
}
void squeeze(char s[], int c)
{
int i, j;
for (i = j = 0; s[i] != '\0'; i++)
if(s[i] != c) //应该是少个if关键字,否则编译会错误的
s[j++] = s[i];
s[j] = '\0';
}
这个函数的功能是找出s1字符串中有哪些字符没有在s2字符串中出现,并把它们按顺序形成一个新的字符串,并显示在屏幕上。
代码运行过程是:
按顺序取出s2的一个字符,与s1中每一个字符进行比较,把不同的字符依次放入s1中,形成新的s1字符串,再取s2的下一个字符,再与新的s1中每一个字符比较,不同的字符再次形成新的s1字符,类推,直到遍历完全部s2字符。
疑问解答:
1.s1[k]='\0';放在那里的原因是因为形成新的s1字符必须有结束符
2.作用就是字符串结尾标志。
3.循环过程上面所说的运行过程。
#include stdio.h
#include stdlib.h
void squeeze(char s1[],char s2[])
{
int i,j,k;
for (i=k=0;s1[i]!='\0';i++)
{
for(j=0;s2[j]!='\0's2[j]!=s1[i];j++)
;
if (s2[j]=='\0')
s1[k++]=s1[i];
}
s1[k]='\0';
printf("s1中去除与s2相同的符号后剩下的是%s\n",s1);
}
main()
{
char s1[20]="hello world!";
char s2[20]="how are you?";
squeeze(s1,s2);
}
这样就对了,字符串数组的初始化错了。
MATLAB是个半开源的软件,在命令窗口输入 type squeeze ,可以看到MATLAB中该函数的实现方法,然后自己写成C语言就可以了。掌握这种方法更重要。
#includestdio.h
void Squeeze(char s[],char c) //此处修改,函数无返回值
{
int i,j;
for(i=0;s[i]=='\0';i++)//此处修改,是关系运算符,不是赋值运算符
{
j=i;
while (s[i]!=c)
{
s[i]=s[j++];
j++;
}
}
//此处修改
}
int main( )
{
char s[50];//此处修改
char c;
printf("输入一串字符s");
scanf("%s",s);//此处修改
printf("输入一个变量c");
scanf("%c",c);//此处修改
Squeeze(s,c); //此处修改,给出具体实参
printf("%s",s);//此处修改
return 0;
}