Я пытаюсь прочитать в файле (input.txt) и перейти строку за строкой и сохранить только слова в векторе (имя). это часть большого проекта, но я застрял здесь. Однако программа компилируется, когда я запускаю ее, я получаю сообщение об ошибке "Segmentation Fault". Я просмотрел свою программу и не могу найти ошибку. я считаю, что это в моем цикле for и как я это сформулировал, но не знаю, как изменить его, чтобы программа работала правильно. Если бы вы могли дать мне несколько советов о том, как изменить его или даже рассказать мне, что случилось, я знаю, с чего начать, что было бы здорово! благодарю!
#include<iostream>
#include<string>
#include<vector>
#include<fstream>
#include<sstream>
using namespace std;
int main()
{
ifstream inf;
inf.open("input.txt");//open file for reading
string s;
getline(inf, s);
string word;
vector<int> index;// for later in my project ignore
vector<string> name;// store the words from the input file
while( !inf.eof())//while in the file
{
istringstream instr(s);//go line by line and read through the string
string word;
instr >> word;
for(int i=0;i<word.length(); i++) //go word by word in string checkin if word and if it is then parseing it to the vector name
{
if(!isalpha(word[i]))
name.push_back(word);
cout<<name[i]<<endl;
}
}
inf.close();
return 0;
}
Вы индексировать name
вектор с переменным циклом вы используете итерировать word
строки. Поскольку у вас есть инструкция if
, вполне возможно, что name.push_back(word);
никогда не вызывается, и сразу вы ошибочно индексируете name
.
for(int i=0;i<word.length(); i++)
{
// If this fails, nothing is pushed into name
if(!isalpha(word[i]))
name.push_back(word);
// But you're still indexing into name with i.
cout<<name[i]<<endl;
}
Просто напечатайте слово из цикла, не нужно индексировать вектор.
for(int i=0;i<word.length(); i++)
{
if(!isalpha(word[i]))
{
name.push_back(word);
cout << "Found word: " << word << endl;
}
}
!isalpha
на isalpha
.