从 C 中的字符串中删除字符

问题描述 投票:0回答:4

我只能访问“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

c arrays replace char
4个回答
6
投票

C 并不以其易用性而闻名,尤其是在处理字符串时,但它有一些相当不错的标准库函数可以完成这项工作。如果您需要广泛处理字符串,您可能需要了解指针和指针算术,但除此之外,这里有一些库函数无疑会对您有所帮助:

  • strchr()
    在字符串中查找字符(例如,
    '&'
    )。
  • strcmp()
    strncmp()
    比较两个字符串。
  • strstr()
    在字符串中查找子字符串(可能比使用
    strchr()
    /
    strcmp()
    组合更容易、更快)。
  • malloc()
    分配一个新字符串。

4
投票

基本上,您需要:

  • 使用
    strstr()
    函数查找“&”
  • 将字符复制到结果缓冲区,直到找到的位置
  • 跳过 4 个字符
  • 重复直到NUL

2
投票

在堆栈或堆上分配另一个缓冲区,然后将字符串一次复制 1 个字符到新缓冲区中。 遇到

&
字符时要进行特殊处理。


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;
© www.soinside.com 2019 - 2024. All rights reserved.