1

该代码采用用户输入(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;查询是如何用空指针('\0')终止字符串的情况下如何用空字符常量替换整个字符\n或如何将其余字符设置为空字符常量。nbsp;

4

3 回答 3

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);
于 2013-10-28T08:31:06.603 回答
1

您可以直接将字符设置为“\n”,而不是 memcpy:*ptchr = '\n';然后使用 memmove 将剩余的行向左移动 - 您将 6 个字符替换为 1,因此您必须将行移动 5 个字符。

于 2013-10-28T08:33:54.870 回答
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 ));   
    }
于 2013-10-28T09:21:24.967 回答