从字符串里面删除所有指定的字符 -- C语言

思路

遍历字符串,发现相同的,就用下一个字符开始的子串向前一个覆盖,记录删除的字符个数k,然后记得在 len - k (最后的一个向后一个位置)的地方标记 '\0'

代码实现

int strRemoveSpecChar(char * str, const char c){
	if(NULL == str){
		printf("strRemoveSpecChar param error\n");
		return PARAM_ERR;
	}	
	
	int len = strlen(str);	
	int k = 0;
	char * p = str;	
	char * t = str + len - 1;

	while('\0' != *p){
		if(c == *p){
			memcpy(p, p + 1, (t - p));
			k++;
			/*p 被覆盖掉了,p的位置是新字符,不用p++*/
			continue;
		}
		p++;
	}

	str[len - k] = '\0';

	return SUCCESS;
}


void teststrRemoveSpecChar(void){
	char str[100] = "cabcdefcgchci";

	printf("\n************  teststrRemoveSpecChar ************ \n");
	
	strRemoveSpecChar(str, 'c');

	printf("after remove char 'c' is : %s\n", str);

	return;	
} 

代码编译

gcc main.c str.c -g -o a.exe

调试输出

************  teststrRemoveSpecChar ************
after remove char 'c' is : abdefghi


 

 

 

 

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值