我只能访问“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;
未来的修改:
strTemp
变量。编辑:
我创建了一篇博客文章来详细说明步骤并提供更灵活的解决方案:
http://www.solutionmaniacs.com/blog/2012/11/25/c-removereplace-characters-in-a-string.html
基本上,您需要:
strstr()
函数查找“&”在堆栈或堆上分配另一个缓冲区,然后将字符串一次复制 1 个字符到新缓冲区中。 遇到
&
字符时要进行特殊处理。
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;