删除字符串中任意指定的字符

声明:以下题目来自网络

思想:八位的char型字符而言,建一个大小为256的数组,把所有元素都初始化为0。然后对于字符串中每一个字符,把它的ASCII码映射成索引,把数组中该索引对应的元素设为1,这样判断是否是要删除的字符时间复杂度就成O(1)了

删除字符时,设置两个指针*pFast,*pSlow,如果*pFast指向的不是要删除的字符把*pFast指向的值赋值给*pSlow,然后两个指针都向后迁移,若*pFast指向的是删除的字符*pFast++判断下一个字符情况

#include <stdio.h>
#include <conio.h>

char TheArray[256];

void InitTheArray(const char * szFind)
{
    while('\0'!=*szFind)
		TheArray[*szFind++] = 1;
}

void ProcessTheString(char * szDestination)
{
    char * pFast;
    char * pSlow;

    pFast = pSlow = szDestination;
	while ('\0'!=*pFast)
	{
	    if(0==TheArray[*pFast])
	        *pSlow++ = *pFast++;        
	    else
	        pFast++;
	}
	*pSlow = '\0';
}

int main()
{
    char szDes[] = "They are Students.";
    char szFind[] = "aeiou";
	
    InitTheArray(szFind);
    ProcessTheString(szDes);
    printf("%s", szDes);
    getch();

    return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值