2013-10-28 133 views
1

代码获取用户输入(HTML标记)在下用字符替换字符串

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

gets(str); 

任务是具有newline("\n")

while((ptrch=strstr(str, "&nbsp;")!=NULL) 
{ 
    memcpy(ptrch, "\n", 1); 
} 

printf("%s", str); 

全部更换&nbsp; OCCURENCES上述代码仅替换第一字符\n

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

+0

是NBSP数组? – sukhvir

+0

@sukhvir这是str的一部分(用户输入使用获取) – user1502952

+1

只是一个建议..不要使用'gets()'..用'fgets'代替 – sukhvir

回答

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); 
+0

对不起,请您指定参数 – user1502952

+0

@ user1502952编辑,希望它有助于 – Zaffy

+0

这可以通过移动而不是所有东西来进行优化,但只能移到下一个' '。然后你从第二个移动到第三个10个字符等。 – aragaer

1

相反的memcpy的,你可以在字符直接设置为“\ n”:*ptchr = '\n';和使用的memmove后向左移动行的其余部分 - 您更换6个字符有1个,所以你必须移动由5个字符组成。

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)); 
    }