用C中的字符替换字符串

时间:2013-10-28 08:28:51

标签: c string strstr

代码采用用户输入(html标记)

ex:
<p> The content is &nbsp; text only &nbsp; inside tag </p>

gets(str);

任务是用&nbsp;

替换所有newline("\n")次出现
while((ptrch=strstr(str, "&nbsp;")!=NULL)
{
  memcpy(ptrch, "\n", 1);
}

printf("%s", str);

上面的代码仅替换\n的第一个字符。

查询是如何用&nbsp;替换整个\n或如何将nbsp;的其余部分设置为空字符常量,而不使用空指针('\ 0')终止字符串。

3 个答案:

答案 0 :(得分:1)

你快到了。现在只需使用memmove将内存移动到新行。

char str[255];
char* ptrchr;
char* end;

gets(str); // DANGEROUS! consider using fgets instead
end = (str + strlen(str));

while( (ptrch=strstr(str, "&nbsp;")) != NULL)
{
    memcpy(ptrch, "\n", 1);
    memmove(ptrch + 1, ptrch + sizeof("&nbsp;") - 1, end-ptrchr);
}

printf("%s", str);

答案 1 :(得分:1)

而不是memcpy你可以直接将字符设置为'\ n':*ptchr = '\n';然后使用memmove移动剩余的行 - 你用1替换了6个字符,所以你必须移动由5个字符组成。

答案 2 :(得分:0)

代码

    char * ptrch = NULL;
    int len =0;
    while(NULL != (ptrch=strstr(str, "&nbsp;")))
    {
      len = strlen(str) - strlen(ptrch);
      memcpy(&str[len],"\n",1);
      memmove(&str[len+1],&str[len+strlen("&nbsp;")],strlen(ptrch ));   
    }