如:"They are students." "aeiou" --->"Thy r stdnts."
对于此题,首先在于输入两个字符串,如果有空格,不能直接使用scanf进行输入,我们可以使用gets继续输入两个字符串,然后进行删除打印操作:
char arr1[20] = { 0 };
char arr2[20] = { 0 };
gets(arr1);
gets(arr2);
若使用scanf,中间需要清空缓冲区,同时%s的符号形式有所变化:
scanf("%[^\n]s", arr1);
getchar();
scanf("%[^\n]s", arr2);
两者实现的效果是相同的,但是比起scanf而言,gets显得更加简便。
那么如何打印出不包括arr2任何字符的arr1字符串呢?
我们可以依次拿出arr1中的每个字符,将其与arr2中的所有字符进行比较,如果不同,就打印,如果相同就返回。
方法一---函数比较
那么根据上面所说,第一步就是拿出arr1中每个字符了,使用一个循环即可,然后我们在IsSame函数中将每个arr1中的字符与arr2全体字符进行比较:
char* pa1 = arr1;
while (*pa1)
{
if (IsSame(arr2, *pa1) == 0)
{
printf("%c", *pa1);
}
pa1++;
}
return 0;
IsSame函数的设计思路如下:
如果我们在arr2中找到一个字符与arr1中的该字符相同,那么我们返回非0值,那么不为0因此不打印,如果每个arr2字符都与arr1的该字符不同,那么我们在循环结束后,返回0,if条件判断即为真,便进行字符的打印。
int IsSame(char* arr2, char ch)
{
while (*arr2)
{
if (ch == *arr2)
return 1;
else
arr2++;
}
return 0;
}
方法二---strchr进行比较
第一种方法,我们自己创建一个函数IsSame来比较字符,那么其实有更简单的方法,就是使用头文件string.h包含的strchr库函数:
char * strchr ( const char* str , int character ) ;
strchr函数传入参数字符数组与一个字符(可以是ASCII码值形式),用于判断字符数组中的字符是否有与该字符相同的字符,如果有,返回该字符数组,没有返回NULL。
根据strchr库函数的性质,我们在进行比较时就方便许多:
char* pa1 = arr1;
while (*pa1)
{
if (strchr(arr2, *pa1) == NULL)
{
printf("%c", *pa1);
}
pa1++;
}
在if条件判断时直接使用strchr函数即可。