使用C语言,编写一个尽可能高效的函数,删除字符串中特定字符。
思路:要求尽可能高效,定义一个256的int数组,将需要删除的字符ASCII作为数组下标,要删除的置1,注意点:处理后的字符串要加'\0'。
#include <stdlib.h>
#include <stdio.h>
#include <string.h>int del_specific_char(char szStr[], const char szMvChar[])
{//ASCII范围[0, 255],是定义一个数组,将字符ASCII作为数组下标,需要删除的置1int aRemoveCharArray[256];memset(aRemoveCharArray, 0, sizeof(aRemoveCharArray));for (int i = 0; szMvChar[i] != '\0'; ++i) {aRemoveCharArray[szMvChar[i]] = 1;}int nDst = 0, nSrc = 0;for (int nSrc = 0; szStr[nSrc] != '\0'; ++nSrc) {if (aRemoveCharArray[szStr[nSrc]] == 0) { //不是要删除的字符szStr[nDst++] = szStr[nSrc];}}szStr[nDst] = '\0'; //注意字符串最后加'\0'return 0;
}int main()
{char szBuf[32] = { 0 };strcpy(szBuf, "this is a test");del_specific_char(szBuf, "tes");printf("szBuf = [%s]\n", szBuf);return 0;
}
程序运行结果如下: