执行此分配,我将信息解析为结构,并在尝试测试时不断收到“字符串下标超出范围”的错误。不知道我哪里出错了。
这是结构
struct baby_type {
std::string name;
std::vector<int> yearsCount;
int total;
} ;
这是我的功能
baby_type Parse_Line(const std::string line )
{
baby_type baby;
std::string name;
std::string year;// = "0000";
std::string total;
int i = 0;
int k = 1;
int LengthOfOccurences = 0;
int DigitOfOccurences = 0;
while (line.at(i) != ',') {
name[i] = line.at(i);
i++;
}
baby.name = name;
i++;
while (k < 100) {
if (line.at(i) == ',') {
year.resize(LengthOfOccurences);
baby.yearsCount.at(k) = std::stoi(year);
//year = "0000";
i++;
k++;
DigitOfOccurences = 0;
LengthOfOccurences = 0;
}
else {
year.at(DigitOfOccurences) = line.at(i);
i++;
LengthOfOccurences++;
}
}
int m = 0;
int LengthOfLine = line.length();
while (i < LengthOfLine) {
total.at(m) = line.at(i);
m++;
i++;
}
baby.total = std::stoi(total);
return baby;
}
答案 0 :(得分:-1)
如果创建空的std :: string对象,然后将字符分配给特定位置。 std :: strings不能那样工作。 在第一个while循环中,使用
name.append(1,line.at(i));
'1'是必要的,因为没有简单的std :: append,只有一个字符作为参数。