作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
首先我要说的是,作为一名 C++ 程序员,我还算新手。但是我懂 PHP 和 VBA,所以对编程基础方面有很好的理解。
因为我在日常工作中经常使用 CSV,所以我认为编写一个处理 CSV 文件的库会是一个很好的学习练习。
我写了这个函数:
int getHeaders(ifstream & os, vector<string> & head2){
string STRING;
getline(os,STRING);
cout << STRING << endl;
STRING.erase(remove(STRING.begin(), STRING.end(), '\"'), STRING.end());
string::iterator it = STRING.begin();
int x = 0;
for (int index = 0; it < STRING.end(); it++, index++) {
if (*it == ',') {
head2.push_back(STRING.substr(0,index));
STRING.erase(0,index+1);
cout << endl << head2[x];
cout << endl << STRING;
x++;
}
}
return head2.size();
}
由以下调用:
int addRowCount = 0;
vector<string> head1;
ifstream outfile;
outfile.open("default.csv", ios_base::app);
cout << getHeaders(outfile, head1) << endl;
cout << head1[0] << endl << head1[1] << endl;
但是当我运行程序时,程序只是将一堆随机垃圾转储到控制台(并使应用程序崩溃)我正在使用 Windows,所以不能使用 valgrind。
有谁知道为什么会这样?显然这个“转储”不是我想要应用程序做的。我希望有人能指出我的代码中可以实现这一点的部分。
提前致谢。
最佳答案
当您在字符串上调用 erase 时,进入该字符串的迭代器将失效,因此在调用 STRING.erase()
之后使用 it
是错误的。
提示:当您查看支持迭代器的类的方法文档时,请注意有关使迭代器无效的注释。在 this page ,例如,阅读标题为 Iterator validity
[与答案无关,而是一个风格问题:在 C 和 C++ 中,对像 STRING 这样的变量名使用全部大写通常被认为是不好的风格。所有大写名称都用于#defined symbols]
关于C++ 代码转储 "random"数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24269981/
我正在为我的应用程序使用 Tank-Auth。我唯一的问题是激活和重置帐户密码。 用于登录、注册、注销;我对这些代码没有问题; $route['login'] = "/auth/login"; $ro
我是一名优秀的程序员,十分优秀!