[英]Problem with getting text from a .txt file in c++ using fstream
[英]Getting line from a txt file using fstream
int main(int argc, const char * argv[])
{
ifstream input;
input.open("test.txt");
string arrAtoms[700];
string temp;
int i = 0;
while(getline(input, temp)){
if(startsWithAtom(temp)) {
arrAtoms[i] = temp;
i++;
}
}
return 0;
}
bool startsWithAtom(string test) {
string atom = "ATOM";
if(test.find(atom) == 0) {
return true;
}
return false;
}
因此,这是我的代码,用于读取一行并将其存储在arrAtoms []中(如果它以“ ATOM”开头)。 由于某种原因,我一直收到错误Thread1:EXC_BAD_ACCESS(code = EXC_1386_GPFLT),我不知道为什么。 请帮忙!
代码在我的机器上运行得很好。 也许问题是该文件的ATOM条目超过700个? 而且您的字符串数组只能包含700。如果您不知道会有多少个条目,请尝试使用向量
这是我测试代码的文件:
沙丁鱼
sodaod sadoiasoda
ATOM阿洛达斯克
ATOM阿洛萨德
ATOM哈哈
绍达奥斯蒂索阿德代萨德萨
原子原子原子
ATOM LOL测试
洛洛洛尔
我还尝试输出数组中的前15个条目,并且效果很好,并且仅包含以ATOM开头的行:
for(unsigned int i=0;i<15;i++)
cout << arrAtoms[i] << endl;
您正在使用长度为700的array
。如果您的文件有700多个以“ ATOM”开头的行,则会发生内存分配错误。 更好的方法是使用vector
,因此您不必担心文件的大小。
#include <vector>
int main(int argc, const char * argv[])
{
ifstream input;
input.open("test.txt");
std::vector <string> arrAtoms;
string temp;
while(getline(input, temp)){
if(startsWithAtom(temp)) {
arrAtoms.push_back(temp);
}
}
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.