Получение строки из 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;
}