输入两个字符串,从第一个字符串中删除第二个字符串中所有的字符

如:"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函数即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值