领导坏人物

时间:2014-09-16 01:32:08

标签: c++ string ifstream

我使用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;作为第一行

1 个答案:

答案 0 :(得分:0)

您的文档开头有一个UTF-8 byte order mark,由十六进制的3字节序列EF BB BF组成(相当于M-oM-;M-?,语言为{ {1}})。

您需要修改程序以适当地处理BOM(即忽略它)或重新编码文本文件以删除BOM。许多文本编辑程序不会在文档中显示BOM,因此您可能认为它不存在,但它仍然存在。