从C++; 在C++程序中,当它读取字符串时,有点类似: "NONAME_1_1\r"
从C++; 在C++程序中,当它读取字符串时,有点类似: "NONAME_1_1\r",c++,C++,\r给我带来了麻烦。我猜它会打印或添加类似“^M”的内容。是这样吗?不管怎样,它给我带来了麻烦,我想摆脱它 我无法修改输入。我想知道,在这一点上,如何使用C++,以最简单的方式,删除这个字符串的 \r>代码>。p> 我知道如何在BASH上做这件事,但没有关于C++的线索。 谢谢。这取决于您如何将其保存在内存中: 如果它在std::string中,只需检查最后一个字节,如果它是'\r',则将其删除 如果它位于常量char*中,则可以使用strncpy将字符串复制到另一个char数组中,有条件地获取
\r
给我带来了麻烦。我猜它会打印或添加类似“^M”的内容。是这样吗?不管怎样,它给我带来了麻烦,我想摆脱它
我无法修改输入。我想知道,在这一点上,如何使用C++,以最简单的方式,删除这个字符串的<代码> \r>代码>。p>
我知道如何在BASH上做这件事,但没有关于C++的线索。
谢谢。这取决于您如何将其保存在内存中:
'\r'
,则将其删除'\r'
替换任何尾随的'\0'
我假设字符串是指
std::string
如果只需要删除字符串的最后一个字符,则可以执行以下操作:
<>编辑:<代码> POPYBACK()/Cyp>是C++的下一个版本,抱歉。
通过一些检查:
if (!mystring.empty() && mystring[mystring.size() - 1] == '\r')
mystring.erase(mystring.size() - 1);
如果要删除所有\r
,可以使用:
mystring.erase( std::remove(mystring.begin(), mystring.end(), '\r'), mystring.end() );
在unix和windows之间移动文件行后,从文件中读取这些行时,这是一个常见问题
- Unix变体使用“\n”(换行符)终止行
- Windows使用“\r\n”(回车,换行)终止行
您可以运行“dos2unix”或“unix2dos”来转换文件中的行。copy\u如果您希望保留原始字符串不变,并且希望删除多个字符(如本例中的CR&LF),则此功能非常有用
const std::string input = "Hello\r\nWorld\r\n";
std::string output;
output.reserve(input.length());
std::copy_if(input.begin(), input.end(),
std::back_inserter(output),
[] (char c) { return c != '\r' && c != '\n'; });
你怎么读这个字符串?你在用iostreams吗?请发布相关代码。如果您是用C编程,这听起来像是strtok的典型用法。最后一个问题是,在比较字符串和字符时,我认为“\r”将需要两个字符,但不是,它只是一个字符。我将如何使用条件语句?如果char[4]==`\r'???我明白了。那么它是否像检测\r\n那样简单?你能告诉我你会怎么做吗?谢谢lot@Werner,我不知道您是如何表示输入的。您问题中的一些示例代码可能会有所帮助。然后使用Charles Bailey的解决方案。最后一个问题是,在比较字符串和字符时,我认为“\r”会占用两个字符,但不是,它只是一个字符。我将如何使用条件语句?if char[4]==`\r'??@Werner:反斜杠引入和转义序列
\r
是回车符、ASCII码十进制13/十六进制0D、^M
等。在单引号中,它是一个单字符常量;在双引号中,它将是一个由两个字符组成的字符串文字:ASCII 13和一个终止的null。谢谢你的这篇文章。我知道必须有一种简单的方法来清除旧mac和windows文件编码中的文件行。因此,现在我首先运行getline(File,line),不使用第三个参数来删除\n(如果存在),然后使用您的示例来清除任何\r。它似乎起作用了。谢谢如果没有这个,垃圾就会留在每个循环的令牌向量的最后一个索引中。我肯定是编码错误\r\n
mystring.erase( std::remove(mystring.begin(), mystring.end(), '\r'), mystring.end() );
const std::string input = "Hello\r\nWorld\r\n";
std::string output;
output.reserve(input.length());
std::copy_if(input.begin(), input.end(),
std::back_inserter(output),
[] (char c) { return c != '\r' && c != '\n'; });