从C中删除字符串中的字符
我只能访问’C’并需要替换字符数组中的字符。 对于这个相对简单的程序,我还没有想出任何干净的解决方案。
我传递了一个字符数组,例如:
char strBuffer[] = "/html/scorm12/course/course_index.jsp?user_id=100000232&course_id=100000879&course_prefix=ACQ&version=2&scorm_version=3&roster_id=100011365&course_name=Test%20Course%201.2&mode=browse&course_number=0000&mode_id=1";
我需要修改此缓冲区以替换所有&
与&
。 生成的缓冲区不必覆盖strBuffer(可以创建新的缓冲区)。
有什么建议?
编辑:
在过去,我已经在循环中完成了strstr函数,但是正在寻找一个更简单的解决方案,可能是C等效于String.Replace方法。
编辑:
对于我的迫切需求,以下是我所需要的一切。
char strBuffer[] = "/html/scorm12/course/course_index.jsp?user_id=100000232&course_id=100000879&course_prefix=ACQ&version=2&scorm_version=3&roster_id=100011365&course_name=Test%20Course%201.2&mode=browse&course_number=0000&mode_id=1"; char strTemp[1024]; char *s = (char*)strBuffer; int i=0; while (*s) { strTemp[i++] = *s; if (strncmp(s,"&",5) == 0) { s += 5; } else s++; } strTemp[i] = 0;
未来的修改:
- 创建一个实用程序函数来存储此函数。
- 将搜索字符串作为参数传递。
- 确定搜索字符串的长度,因此可以删除硬编码的5。
- 动态分配strTemp变量。
- 检查未找到空字符串和字符时出错。
编辑:
我创建了一篇博文,详细介绍了这些步骤并提供了更灵活的解决方案:
http://www.solutionmaniacs.com/blog/2012/11/25/c-removereplace-characters-in-a-string.html
char *s = (char*)strBuffer; char sClean[strlen(strBuffer) + 1]; /* +1 for null-byte */ /* if above does not work in your compiler, use: char *sClean = (char*)malloc(sizeof(strBuffer) + 1); */ int i=0; while (*s) { sClean[i++]= *s; if ((*s == '&') && (!strncmp(s, "&", 5)) s += 5; else s++; } sClean[i] = 0;
C没有注意到它的易用性,特别是在字符串方面,但它有一些相当不错的标准库函数可以完成工作。 如果你需要在字符串上广泛工作,你可能需要了解指针和指针算法,但是这里有一些库函数无疑会帮助你:
-
strchr()
在字符串中查找字符(比如'&'
)。 -
strcmp()
和strncmp()
来比较两个字符串。 -
strstr()
在字符串中查找子字符串(可能比使用strchr()
/strcmp()
组合更容易,更快。 -
malloc()
分配一个新字符串。
基本上,您需要:
- 使用
strstr()
函数查找“&” - 将字符复制到生成的缓冲区,直到找到的位置
- 跳过4个字符
- 重复,直到NUL
在堆栈或堆上分配另一个缓冲区,然后一次将字符串复制到新的缓冲区1个字符中。 遇到&
字符时进行特殊处理。