所以我遇到了一些看似非常简单问题的奇怪问题。
我有一个矢量:
vector(string)collectionOfLines;
这包含我从.txt文件中获取的文本行。文本文件的内容是:
“4
磁盘0.2 0.00005
Mouse 0.4 0.00002
键盘0.3 0.00004
网络0.5 0.0001“
collectionOfLines [0] =“Disk 0.2 0.00005”
我正在尝试将此字符串分成三个不同的字符串:“Disk”,“0.2”和“0.00005”,然后将这些字符串放入另一个向量中:
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
Mouse 0.4 0.00002
磁盘0.2 0.00
键盘0.3 0.00004
磁盘0.2 0.00
网络0.5 0.0001“
显然这个输出是完全错误的,除了第一个输出,“磁盘。”
非常感谢帮助,谢谢!!!!
答案 0 :(得分:1)
这是分解字符串的一种奇怪方式,特别是因为您已经知道了一致的格式。您是否有使用substr()的特殊原因?请尝试使用输入字符串流。
#include <sstream>
#include <string>
...
istringstream iss(currentLine);
getline(iss, deviceName, ' ');
getline(iss, interruptProbability, ' ');
getline(iss, interruptTime);