从在C字符串中删除的字符(Remove characters from a string in C)

2019-07-20 07:21发布

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

Answer 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;


Answer 2:

C不会注意到它的易用性,特别是当它涉及到的字符串,但它有一些相当不错的标准库函数,将完成这项工作。 如果您需要在字符串广泛工作,你可能会需要了解指针和指针算法,但除此之外,这里有一些库函数,无疑将帮助你:

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


Answer 3:

基本上,你需要:

  • 使用strstr()函数来查找与“&” S
  • 复制字符所产生的缓冲器到位置发现
  • 跳过4个字符
  • 重复,直到NUL


Answer 4:

分配另一个缓冲器,无论是在堆栈或堆,然后将字符串复制到新的缓冲器1个字符在一个时间。 做特殊处理,当你遇到&性格。



文章来源: Remove characters from a string in C