要求输入一个字符串内有若干个字符,再输入一个字符,使得输出字符串中这一字符全部被删除。
对于这个问题,我们考虑构造delete_me函数(delete是已定义过的函数不能再做变量名)来实现。我们首先想到的思路当然是使用两个字符串数组,一个输入原始字符串,一个进行删减处理后输出,代码如下:
#include <stdio.h>
int main()
{
char a,str[100];
void delete_me(char str[],char ch);
printf("请输入字符串\n");
gets(str);
printf("请输入想删除的字符\n");
scanf("%c",&a);
delete_me(str,a);
return 0;
}
void delete_me(char str[],char ch)
{
char dstr[100];
int i,j;
for(i=j=0;str[i]!='\0';i++)
{
if(str[i]!=ch){
dstr[j++]=str[i];
}
}
dstr[j]='\0';
printf("删除后字符串为:\n");
printf("%s\n",dstr);
}
这种方法固然由于引入dstr而变得很好理解,但是我们会发现dstr是一个局部变量,输出dstr只能放在函数中。由模块化思想,我们希望这个函数仅做数据处理,而输出放在主函数中,这就要求我们只用一个数组进行处理。
优化如下:
#include <stdio.h>
int main()
{
char a,str[100];
void delete_me(char str[],char ch);
printf("请输入字符串\n");
gets(str);
printf("请输入想删除的字符\n");
scanf("%c",&a);
delete_me(str,a);
printf("删除后字符串为:\n");
printf("%s\n",str);
return 0;
}
void delete_me(char str[],char ch)
{
int i,j;
for(i=j=0;str[i]!='\0';i++)
if(str[i]!=ch)
str[j++]=str[i];
str[j]='\0';
}
运行结果: