2

以下のコードでは、文字”も無視したいと思います。しかし、それを追加した後でも、出力として「Mr_Bishop」が表示されます。

私は次のコードを持っています:

    ifstream getfile;
    getfile.open(file,ios::in);
        char data[256];
    char *line;
    //loop till end of file                   
    while(!getfile.eof())
    {
            //get data and store to variable data
            getfile.getline(data,256,'\n');

        line = strtok(data," ”");
        while(line != NULL)
        {
            cout << line << endl;
            line = strtok(NULL," ");
        }
    }//end of while loop

私のファイルの内容:

hello 7 “Mr_Bishop”
hello 10 “0913823”

基本的に、私が出力したいのは次のとおりです。

hello
7
Mr_Bishop
hello
10
0913823

このコードで私は得るだけです:

hello
7
"Mr_Bishop"
hello
10
"0913823"

前もって感謝します!:)

引用符が欠落している内側のループでエラーが発生したことに気付きました。しかし今、私は次の出力を受け取ります:

hello
7
Mr_Bishop
�
hello
10
0913823
�

何か助けはありますか?ありがとう!:)

4

2 に答える 2

2

ワードパッドなどを使用してファイルを生成したようです。Windowsではメモ帳またはメモ帳++を使用するか、LinuxでASCIIエンコーディングを作成する同様のものを使用する必要があります。現在、UTF-8エンコーディングのように見えるものを使用しています。

さらに、「」の適切なエスケープシーケンスは「」です。例えば

line = strtok(data," \"");

ファイルをASCIIエンコーディングに修正すると、ループ内で何かを見逃していることに気付くでしょう。

while(!getfile.eof())
{
        //get data and store to variable data
        getfile.getline(data,256,'\n');

    line = strtok(data," \"");
    while(line != NULL)
    {
        std::cout << line << std::endl;
        line = strtok(NULL," \""); // THIS used to be strtok(NULL," ");
    }
}//end of while loop

あなたはそこで一組の引用を逃しました。ファイルとこの間違いを修正すると、適切な出力が得られます。

于 2012-05-15T20:08:21.843 に答える
1

コードを注意深く見てください

    line = strtok(data," ”");

引用符がさまざまな角度で傾いていることに注意してください(私の場合はそうですが、フォントが同じことを示していると思います)。strtok()呼び出しには、最後の二重引用符のみを含めました。ただし、データファイルには次のものがあります。

hello 7 “Mr_Bishop”

これには2種類の引用符があります。データに「正しい」ものが何であれ、すべての正しい文字を使用していることを確認してください。

更新:データはおそらくUTF-8でエンコードされており(このようにして、それらの傾いた二重引用符がそこに含まれています)、strtok()UTF-8エンコードをまったく認識していないものを使用しています。したがって、おそらく間違ったことをしていて、マルチバイトUTF-8文字を分割し、行の終わりにゴミを残しています。

于 2012-05-15T19:49:29.533 に答える