【发布时间】:2010-12-02 18:21:37
【问题描述】:
我只能访问“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
【问题讨论】:
-
这是作业吗? (如果有也没关系,如果合适的话标记为
[homework]。) -
高级语言中的任何
String.Replace方法实际上都会在C 级别的循环中归结为strstr()。 C 与“抽象”和“易用性”等崇高理想无关。 -
感谢所有帮助我解决此问题的人。我在 C# 中被宠坏了,忘记了如何在 C 中进行一些相对简单的字符串操作。