我的字符串:
std::string With_esc = "asd\b";
我想将其转换为简单的字符串“as”(应用退格字符并忘记它)。
有什么办法可以在C++中做到这一点?它看起来应该像这样:
std::string With_esc = "asd\b";
std::string Without_esc = With_esc; //Here I should convert it
std::ofstream FWith_esc ("with");
std::ofstream FWithout_esc ("without");
FWithout_esc << Without_esc;
FWith_esc << With_esc;
重击:
~ cat -e with
asd^H
~ cat -e without
as
不幸的是,我不知道如何转换它,所以两个文件看起来完全一样。
最佳答案
假设您有幸使用C++ 11(否则请将此代码修改为您喜欢的regex引擎):
string With_esc = R"asd\b";
string Without_esc = regex_replace(With_esc, regex(".\\b"), "");
正如评论中指出的那样,此方法具有以下局限性:
"12\b\b"
,则会得到"1\b"
。为了解决这个问题,您需要循环直到输入和输出(对于regex_replace()
)有所不同(或者也许是更好的正则表达式,我对它们不太满意)。 \b
中那样将"\b123"
作为字符串的开头来处理。要解决此问题,您需要简单的字符串替换(使用Giobunny建议的技术),以便在\b
()之后删除regex_replace
。 更新
正如Eric Finn所指出的,该表达式还将匹配多个退格键,然后
"a\b\b\b"
将变为"\b\b"
然后是"\"
,这显然是错误的。正如他建议的那样,一个更好的正则表达式也应该包括对"[^\b]\b"
的检查。关于c++ - 将带有 '\b'转义符(退格)的字符串转换为普通字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25037848/