读《C程序设计语言》笔记7

习题2-4:

  编写函数squeeze(s1,s2),将字符串s1中任何与字符串s2中字符匹配的字符都删除

  在写次函数之前,先看下一个更简单的函数squeeze(char s[], int c),从字符串s中删除字符c

#include<stdio.h>

void squeeze(char s[], int c)

{

	int i,j;

	for(i=j=0; s[i]!='\0'; i++)

		if(s[i]!=c)

			s[j++]=s[i];

	s[j]='\0';

}



int main()

{

	char s[]={};

	int i=0;

	while((s[i++]=getchar())!=100)

		;

	squeeze(s,'a');

	printf("结果为:%s\n",s);

	system("pause");

	return 0;

}

执行效果如下:

  函数删除了指定的字符'a'。

  再看前面的习题:  

#include <stdio.h>

void squeeze(char s1[], char s2[])

{

	int i,j,k;

	i=k=0;

	for(; s1[i]!='\0'; i++)

	{

		for(j=0; s2[j]!='\0' && s2[j]!=s1[i]; j++) //j=0必须在for循环里面,

			;                                      //不能定义到外面去,这是内层循环

		if(s2[j]=='\0')

			s1[k++]=s1[i];

	}

	s1[k]='\0';

}



int main()

{

	char s1[]={"zhiyu"};

	char s2[]={"liu"};

	printf("%s\n",s1);

	squeeze(s1,s2);

	printf("%s\n",s1);

	system("pause");

    return 0; 

}

执行效果:

  读《C程序设计语言》笔记7 

小结:循环的指示器变量初始化,外层的可以在外面初始化,内层的决不能放到外层初始化,这是一个很简单的问题,我就犯了这么低级的错误。其实放到循环体里初始化挺好的。

  

你可能感兴趣的:(程序设计)