我使用ifstream从文件的第一个单词开头收到3个坏字符。
我试过修剪弦乐,但无济于事。
string trim(string in){
string out;
int strBegin = in.find_first_not_of(" \t");
if( strBegin == string::npos)
return "";//nothing
int strEnd = in.find_last_not_of(" \t");
int strRange = strEnd - strBegin + 1;
out = in.substr(strBegin, strRange);
transform(out.begin(), out.end(), out.begin(), ::tolower);
return out;
}
这是我在阅读时得到的输出"你好,"我文件中的第一个单词。
� i: 0
�� i: 1
�he i: 2
hell i: 3
ello i: 4
llo i: 5
lo i: 6
o i: 7
这是从:
打印出来的for(int i=0; i<temp.length(); i++){
cout<<temp.substr(i,i+1)<<" i: "<<i<<endl;
}
cat -vg on txt file
M-oM-;M-?Hello, world test
文件实际上包含&#34; Hello,World test&#34;作为第一行
答案 0 :(得分:0)
您的文档开头有一个UTF-8 byte order mark,由十六进制的3字节序列EF BB BF
组成(相当于M-oM-;M-?
,语言为{ {1}})。
您需要修改程序以适当地处理BOM(即忽略它)或重新编码文本文件以删除BOM。许多文本编辑程序不会在文档中显示BOM,因此您可能认为它不存在,但它仍然存在。