2

一度に 1 行ずつ読み取りながら、テキスト ファイルを解析しています。行ごとに、最初の n 文字が特定の単語に一致するかどうかを確認してから、その行を処理する必要があります。

現在、次のように行われています。

while (!inFile.eof()) 
{
    std::string line;
    std::getline(inFile, line);            
    if (compareCaseInsensitive(line, "facet", 5)) 
    {               
        std::stringstream lineStream(line);   
        float a,b,c;
        std::string filler;
        lineStream >> filler >> filler >> a >> b >> c;  
    }
}

文字を文字列に読み取り、それらの文字を文字列ストリームにコピーしてから、それらの文字を特定の変数に読み取ります。これは非常に非効率に思えます。文字列ストリームに直接読み込む方法はありますか? または不要なコピーを防ぐために文字列からトークンを抽出しますか?

4

1 に答える 1

2

sscanfはおそらくあなたが探しているものです:

char filler[64];
float a,b,c;
sscanf(line.c_str(), "%s %s %f %f %f", filler, filler, &a, &b, &c);

ただし、実際に使用するセパレーターを処理するには、フォーマット文字列を修正する必要があります。ここでは、具体性のために (スペース) を推測しています。 C 書式指定子を使用すると、入力文字列が正確にどのように書式設定されるかについての不確実性を考慮して、(無制限ではありませんが) 多くの余裕ができます。

于 2013-05-31T18:44:43.207 に答える