在一个C++程序中,有时需要读取一个字符串,例如:
"NONAME_1_1\r"
\r
给我带来了麻烦。我猜它会打印或添加类似于“^M”的东西,对吗?不管怎样,它给我造成了问题,我想摆脱它。
我不能修改输入。我想知道在这种情况下,如何使用C ++以最简单的方式删除该字符串中的\r
。
我知道如何在bash上执行此操作,但在C ++方面一无所知。
谢谢。
在一个C++程序中,有时需要读取一个字符串,例如:
"NONAME_1_1\r"
\r
给我带来了麻烦。我猜它会打印或添加类似于“^M”的东西,对吗?不管怎样,它给我造成了问题,我想摆脱它。
我不能修改输入。我想知道在这种情况下,如何使用C ++以最简单的方式删除该字符串中的\r
。
我知道如何在bash上执行此操作,但在C ++方面一无所知。
谢谢。
我假设你说的“string”是指 std::string
。
如果只需要删除字符串的最后一个字符,你可以这样做:
mystring.pop_back();
mystring.erase(mystring.size() - 1);
编辑: pop_back()
是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() );
\r
是回车符,ASCII码十进制13/十六进制0D,^M
等。在单引号中,它是一个单字符常量;在双引号中,它将成为由两个字符组成的字符串字面值:ASCII 13和终止空值。 - CB Bailey如果您想保留原始字符串并且想要删除多个字符(例如此示例中的CR和LF),则copy_if非常有用。
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'; });
这取决于你如何在内存中保存它:
'\r'
,则删除它。'\r'
替换为'\0'
。在将文件在Unix和Windows之间移动后,从文件中读取行时会出现常见问题。
您可以运行“dos2unix”或“unix2dos”来转换文件中的行。