1.请看例题:
【问题描述】分别用字符数组或字符指针做函数参数,在字符串中删除与某字符相同的字符,执行两次删除和结果输出显示。若删除后为空串,则输出NULL。
void Delete1(char s[ ], char ch);
void Delete2(char *p, char ch);
【样例输入】
abcdabcd
c
d
【样例输出】
abdabd
abab
2.由题干描述,笔者建议使用字符数组作为函数,由于我们在写一个指针的时候需要了解它的指向,类型等诸多问题,因此我们可以节省大把时间。
3.由于第一次删除就有可能判断为空串,所以要使用两个函数,前一个有返回值,并将该值作为第二个函数的执行条件。
4.连续使用scanf输入字符型会导致回车被读走从而影响函数,因此可以编写如下代码以避免此类情况: while ((b = getchar()) != EOF && b != '\n')
{
;
}
5.完整代码:
#include<stdio.h>
#include<string.h>
int good(char arr[], char a)
{
int j = strlen(arr);
int i = 0;
int c = 0;
for (i = 0; i < j; i++)
{
if (arr[i] != a)
{
arr[c] = arr[i];
c = c + 1;
}
}
arr[c] = '\0';
if (strlen(arr) == 0)
{
printf("NULL");
return 9;
}
if (strlen(arr) != 0)
{
printf("%s", arr);
}
printf("\n");
}
void bad(char arr[], char b, char a)
{
int j = strlen(arr);
int i = 0;
int c = 0;
for (i = 0; i < j; i++)
{
if (arr[i] != b && arr[i] != a)
{
arr[c] = arr[i];
c = c + 1;
}
}
arr[c] = '\0';
if (strlen(arr) == 0)
{
printf("NULL");
}
if (strlen(arr) != 0)
{
printf("%s", arr);
}
printf("\n");
}
int main()
{
char arr[50];
char arr1[50];
gets(arr);
int f = 0;
f = strlen(arr);
int g = 0;
for (g = 0; g <= f; g++)
{
arr1[g] = arr[g];
}
char a;
scanf("%c", &a);
int c;
c = good(arr, a);
char b;
while ((b = getchar()) != EOF && b != '\n')
{
;
}
scanf("%c", &b);
if (c != 9)
{
bad(arr, b, a);
}
return 0;
}