【问题标题】:String replacement and strange characters字符串替换和奇怪的字符
【发布时间】:2012-12-05 11:49:11
【问题描述】:

我在 char* 中有一个 HTML 数据,我想逐行获取它,进行一些替换,然后将它们全部添加到一个字符串中。这是我使用的代码

std::string to, finalData;
finalData = ""; 
char* char_array = strtok(data, "\n");
while(char_array){
    finalData += std::string(char_array);
    char_array = strtok(NULL, "\n");
}  

问题是我在此结束时获得的数据 (finalData) 有很多 ^M 字符,我无法搜索它,因为它有一个特殊字符。有什么办法可以彻底消除角色? 我猜测它与从 c 数组到 c++ 字符串的转换以及与 \n 的转换有关,因为 tab 由 ^I 表示,而 cntrl 表示为 ^

【问题讨论】:

    标签: c++ linux string strtok


    【解决方案1】:

    您似乎使用的是 Windows 系统,或者数据源自 Windows 系统。在 Windows 系统上,换行符实际上是两个字符:"\r\n"。您所看到的 ^M 是该换行符序列的回车符 ('\r')。

    删除这些额外字符的一种方法是在循环中使用std::string::findstd::string::erase

    另一种方法是手动逐个字符复制到新的std::string,除非该字符是'\r'

    【讨论】:

    • 我用的是linux系统,初始数据是网页的html源。
    • @PrasanthMadhavan 是的,许多 Internet 协议也使用 "\r\n" 行结束序列。无论如何,我添加了两种删除不需要的回车符的方法。
    • 这有帮助。我将代码中的\n 更改为\r\n,它起作用了。
    • 如果你想知道为什么^M是回车符,看看an ASCII table。找到回车,然后添加 64 并查看您找到的字符(在链接的图像中,只需查看两列)。
    猜你喜欢
    • 1970-01-01
    • 2012-08-31
    • 2014-02-27
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    • 2021-12-13
    • 2011-01-16
    • 1970-01-01
    相关资源
    最近更新 更多