簡體   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