很抱歉,这个问题的措词很差,但想不出其他任何表达方式(英语不是我的母语)
因此,我正在阅读《加速C ++》一书,并尝试练习5.2。在这里我必须测试2个类似函数的运行时间,其中一个使用列表,另一个使用矢量。我正在尝试读取具有以下格式的1000行的文件:
LPUDPOFK 57 52 66
ONKYTCIL 85 64 43
XMNGQJLL 75 74 70
ETVCUKDI 29 89 94
到std :: vector学生中,我想将行的第一个字符串存储为名称,然后将其存储为mid,fin,grade。
struct Student
{
std::string name;
double mid, fin, grade;
std::vector<double> hw;
};
我尝试使用split函数将文件行拆分为字符串向量。
vector<string> split(const string& s)
{
vector<string> ret;
typedef vector<string>::size_type string_size;
string_size i = 0;
// invariant: we have processed characters [original i, i)
while (i != s.size())
{
// skips spaces
while (i != s.size() && isspace(s[i]))
++i;
string_size j = i;
// goes from first the most current ith character to the next space character
while (j != s.size() && !isspace(s[j]))
++j;
if (i != j)
{
ret.push_back(s.substr(i, j - i));
i = j;
}
}
return ret;
}
我的主要是
int main()
{
std::ifstream input("1000.txt");
std::string line;
std::vector<string> lines;
while (getline(input, line))
{
lines.push_back(line);
}
std::vector<Student> students(1000);
for (std::string::size_type i = 0; i < lines.size(); ++i)
{
std::vector<string> ret = split(lines[i]);
students[i].name = ret[0];
const char* mid = ret[1].c_str();
students[i].mid = std::atof(mid);
const char* fin = ret[2].c_str();
students[i].fin = std::atof(fin);
const char* grade = ret[3].c_str();
students[i].grade = std::atof(grade);
}
char c = getchar();
return 0;
}
当我尝试运行它时,出现错误,提示“调试断言失败” ...“表达式:c> = -1 && c <= 255” 我的代码有什么问题?还有人知道更好的方法吗?