0

だから私は非常に単純な問題のように見えるものでいくつかの奇妙な問題を抱えています。

私はベクトルを持っています:

vector(string)collectionOfLines;

これは、.txtファイルから取得したテキスト行を保持します。テキストファイルの内容は次のとおりです。

「4

ディスク0.20.00005

マウス0.40.00002

キーボード0.30.00004

ネットワーク0.50.0001 "

collectionOfLines [0]="ディスク0.20.00005"

この文字列を「Disk」、「0.2」、「0.00005」の3つの異なる文字列に分割してから、これらの文字列を別のベクトルに配置しようとしています。

vector(string)collectionOfCommands;

これは、行文字列から部分文字列を取得し、それらを新しいベクトルに配置するための私のループです。

string deviceName;
string interruptProbability;
string interruptTime;

for(int i = 1; i < collectionOfLines.size(); i++) { // i = 1 because I am ignoring the "4" in the txt file
    string currentLine = collectionOfLines[i];
    int index = 0;
    for(int j = 0; j < currentLine.length(); j++) {
        if(j == 0) {
            continue;
        } else if(deviceName.empty() && currentLine[j-1] == ' ') {
            deviceName = currentLine.substr(index, j-1);
            index = j;
        } else if (interruptProbability.empty() && currentLine[j-1] == ' ') {
            interruptProbability = currentLine.substr(index, j-1);
            index = j;
        } else if (!deviceName.empty() && !interruptProbability.empty()) {
            interruptTime = currentLine.substr(index, currentLine.length());
            break;
        } else {
            continue;
        }
    }
    collectionOfCommands.push_back(deviceName);
    collectionOfCommands.push_back(interruptProbability);
    collectionOfCommands.push_back(interruptTime);
}

これを実行するとエラーは発生しませんが、collectionOfCommandsの出力を出力すると次のようになります。

"ディスク

0.2 0.00

0.00005

ディスク

0.2 0.00

マウス0.40.00002

ディスク0.20.00

キーボード0.30.00004

ディスク0.20.00

ネットワーク0.50.0001 "

明らかに、この出力は、最初の出力である「ディスク」を除いて、完全に間違っています。

助けていただければ幸いです、ありがとうございます!!!!

4

1 に答える 1

1

これは、特に一貫した形式をすでに知っているので、文字列を分割する奇妙な方法です。substr()を使用している特別な理由はありますか?代わりに、入力文字列ストリームを使用してみてください。

    #include <sstream>
    #include <string>
    ...

    istringstream iss(currentLine);

    getline(iss, deviceName, ' ');
    getline(iss, interruptProbability, ' ');
    getline(iss, interruptTime);
于 2013-02-07T20:58:33.110 に答える