繁体   English   中英

使用fstream从txt文件获取行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM