void readGroups(ifstream &filein) {
vector<string> listOfStringTokens;
string tmpLine = "";
string tokens = "";
string courseCode, groupCode, groupName;
int minGroupSize = 0, maxGroupSize = 0;
int counter = 0;
while (filein.good()){
getline(filein, tmpLine);
istringstream iss(tmpLine);
while (!iss.eof()){
getline(iss, tokens, ';');
listOfStringTokens.push_back(tokens);
}
}
tmpLine = "";
tokens = "";
filein.close();
for (unsigned i = 0; i<listOfStringTokens.size(); i++){
courseCode = listOfStringTokens.at(i);
groupCode = listOfStringTokens.at(i+1);
groupName = listOfStringTokens.at(i+2);
minGroupSize = converter(listOfStringTokens.at(i+3), minGroupSize);
maxGroupSize = converter(listOfStringTokens.at(i+4), maxGroupSize);
cout << courseCode << "t" << groupCode << "t" << groupName << "t"
<< minGroupSize << "t" << maxGroupSize << "t" << endl;
i += 4;
}
}
int converter(string a, int b) {
stringstream convert;
convert << a;
convert >> b;
convert.str("");
convert.clear();
return b;
}
大家好!
这几乎是我第一次使用向量,现在我陷入了困境。我问题的根源是for loop
.at()
中unsigned i
变量的增加,因为我把它曝光了。但是,我必须使它获得适当的输出。所以我需要你的帮助,使这段代码完美运行,而不修改输出的结构。
它的输出方式:
xxxxxxxxx xxxxxxx xxxxxxxxxxxxxxxxxxxx xx xx
xxxxxxxxx xxxxxxx xxxxxxxxxxxxxxxxxxxx xx xx
xxxxxxxxx xxxxxxx xxxxxxxxxxxxxxxxxxxx x xx
invalid vector<T> subscript
您允许i
达到允许访问向量的最大数量。问题是您在调用"at"时添加更多内容。
假设listOfStringTokens
包含 12 个元素。想象一下最后一次迭代:i<listOfStringTokens.size()
为真,i
为 11:
courseCode = listOfStringTokens.at(i);
这将起作用,因为您访问索引 11。
groupCode = listOfStringTokens.at(i+1);
这将不起作用,因为i+1
生成的索引超出范围。
您还可以在两个不同的位置递增i
:
for (unsigned i = 0; i<listOfStringTokens.size(); i++)
和这里
i += 4;
这可能会导致您在以后的某个时间点失去监督。请考虑在第一行执行所有增量。