Получение строки из txt файла с использованием 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), и я понятия не имею, почему. Пожалуйста помоги!

2 ответа

Код работает довольно хорошо на моей машине. Может быть, проблема в том, что в файле больше записей ATOM, чем 700? И ваш массив строк может содержать только 700. Если вы не знаете, сколько будет записей, попробуйте использовать вектор

Это файл, на котором я тестировал код:

soadiaodiaodsa
Sdaiod Sadoiasoda
АТОМ Алодаскд
АТОМ Алосад
АТОМ лол
Saodai Aosdisoad Daiosiadsa
АТОМ АТОМ АТОМ
АТОМ LOL тест
lololololol

Я также попытался вывести первые 15 записей в массиве, и он работает нормально и состоит только из строк, начинающихся с ATOM:

for(unsigned int i=0;i<15;i++)
  cout << arrAtoms[i] << endl;

Ты используешь array длиной 700. Если в вашем файле более 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;                
}
Другие вопросы по тегам