从一个字符串中删除其包含的某个(第一个)子串

函数原型:

int del_substr(char *str,char const *substr);

首先应该判断substr是否在str中,如果并未出现则返回0;

如果出现,函数应该吧str中位于该子串后面的所有字符复制到该子串的位置,从而删除这个子串,然后函数返回1。如果substr多次出现在str中,函数只删除第一次出现的子串,函数的第二个参数绝对不应该被修改。

源码:

int del_substr(char *str,char const *substr)
{
	if(str == NULL || substr == NULL)
	{
		return 0;
	}
	//标记str中substr开始的位置
	char * begin = str;

	//标记str中substr结束的位置
	char * end = str;

	//substr用于比较的游标指针
	char const * index = substr;
	while(*begin != '\0' && *end != '\0')
	{
		//在str中寻找substr
		while(*begin != *index)
		{
			begin++;
		}
		end = begin + 1;
		index++;
		while(*index == *end && *index != '\0' && *end != '\0')
		{
			index++;
			end++;
		}
		//如果index和end同时到达各自的字符串尾部,substr子串在str中被找到
		//例如str:"abcdeXYZ",substr:"XYZ"
		if(*index == '\0' && *end == '\0')
		{
			*begin = '\0';
			printf(str);
			return 1;
		}
		/* 如果index到达substr字符串尾部,而end没有到达str的尾部,substr子串在str中被找到
		 * 例如str:"abcdeXYZmn",substr:"XYZ"
		 */
		else if(*index == '\0' && *end != '\0')
		{
		    while(*begin++ = *end++);
			printf(str);
			return 1;
		}
		/* 如果index未到达substr字符串尾部,而end有到达str的尾部,substr子串在str中未被找到
		 * 例如str:"abcdeXYZmn",substr:"XYZmnST"
		 */
		else if(*index != '\0' && *end == '\0')
		{
			printf(str);
			return 0;
		}
		/*字符串匹配尚未完成
		 * 例如str:"XYZabcdeXYZmnSTghd",substr:"XYZmnST"
		 */
		else
		{
			begin++;
			end = begin;
			index = substr;
		}
	}
	printf(str);
	return 0;
}

对于str包含多个substr的情况如果需要删除str中所有的substr可以使用上面的函数进行递归调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值