我正在使用C ++文件,但是遇到了一个有趣的问题。 我正在将字符串输出到文本文件中(使用ofstream),并且有以下几行。
void InstructionWriter::outputLabel(string s){
string sLabel;
sLabel = s;
sLabel.erase(remove(sLabel.begin(), sLabel.end(), ' '),sLabel.end());
sLabel = "(" + function + "$" + sLabel + ")\n" ;
outputFile << sLabel;
}
问题出在txt文件输出期间。
当我转到运行outputLabel的文本文件时,突出显示该行将计算+1个字符。 +1是“看不见的”。突出显示该行不会选择它。解决此问题的唯一方法是从右侧开始删除。按下')'后,我会注意到我再次按下了Delete键,但是光标没有移动,似乎没有任何内容被删除。
我认为它正在潜入零宽度字符,但是我不知道如何从字符串中删除它,有人对要查找的函数有任何想法吗?
@ smac89
terminate called after throwing an instance of 'std::length_error'
what(): basic_string::_M_replace
0
这是终端在运行您提到的命令后向我扔的东西。
答案 0 :(得分:0)
请尝试执行以下操作,而不要使用sLabel.erase(remove(sLabel.begin(), sLabel.end(), ' '),sLabel.end());
:
std::string from = " ", to = "";
size_t start_pos = 0;
while ((start_pos = sLabel.find(from, start_pos)) != std::string::npos) {
sLabel.replace(start_pos, from.length(), to);
start_pos += to.length();
}
因为该字符串是UTF-8编码的;并且您不能依赖单个字节。仅操作子字符串。
答案 1 :(得分:0)
每个人,我都能弄清楚。
根据Smacs的评论,我将输出文本文件上传到二进制编辑器。奇怪的是,我在手动输入的换行符之前找到了一个0D。
我在字符串上使用了正则表达式替换,现在它没有在字符串中添加该0D字符。
感谢所有提示。