Надо сравнить лексемы вводимого текста с лексемами из текстового файла и выводить следующую строку от найденной лексемы. Но не удаётся вывести. Почему?
Пробую так:
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <fstream>
using namespace std;
int main()
{
string text;
string word;
char buffer[200];
//----------------Работа с вводимым текстом-------------------------------
getline(cin, text);
stringstream buff(text);
vector <string> vectext;
while(buff >> word) vectext.push_back(word);
//unsigned int vector_size = vectext.size();
//--------------------------Работа с текстовым файлом---------------------
ifstream fin("text.txt");
if (!fin.is_open())
cout << "Файл не может быть открыт!\n";
}
while (fin >> word)
for (int i = 0; i < vectext.size(); i++)
if (word == vectext[i])
{
getline(fin,word);// не выводит, а если через fin >> word, то работает.
cout << word << endl;
break;
}
return 0;
}
Похоже, что мне проще объяснить, написав работающий код на основе вашего (насколько я понял все условия (в т.ч. озвученные в комментариях)).
Итак, программа вводит строку содержащую список поисковых слов (лексем, в вашей терминологии).
Затем она читает файл вот в таком формате:
avp@avp-ubu1:hashcode$ cat text.txt
b1 aa
line 1 text...
b2
line 2 text... word1 word2 word3
b3 bbb
line 3 text...
b4
line 4 word1 word2 word3
avp@avp-ubu1:hashcode$
Четные строки файла содержат список лексем, "адресующих" следующую строку.
Программа должна напечатать те строки (вместе с их порядковыми номерами) этого файла, для которых хотя бы одна из лексем, введенных со стандартного ввода совпала хотя бы с одной из "адресующих" строку лексем.
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <fstream>
using namespace std;
int main (int ac, char *av[])
{
string text;
string word;
char buffer[200];
//----------------Работа с вводимым текстом-------------------------------
getline(cin, text);
stringstream buff(text);
vector <string> vectext;
while (buff >> word)
vectext.push_back(word);
//--------------------------Работа с текстовым файлом---------------------
ifstream fin(av[1] ? av[1] : "text.txt");
if (!fin.is_open())
cout << "Файл не может быть открыт!\n", exit(1);
int lineno = 0;
while (getline(fin, text)) { // читаем строку лексем
lineno++;
string text2;
if (getline(fin, text2)) { // читаем следующую строку, с которой связаны лексемы
lineno++;
stringstream lwords(text);
bool found = false;
while (!found && lwords >> word) // перебираем лексемы связанные со строкой
for (int i = 0; !found && i < vectext.size(); i++)
if (vectext[i] == word) { // сравниваем с лексемами в введенном тексте
found = true;
cout << lineno << ": " << text2 << '\n';
cout << "found by '" << word << "'\n\n";
}
} else
cout << "error in file format\n";
}
return 0;
}
Пример запуска:
avp@avp-ubu1:hashcode$ g++ t.cpp && ./a.out
bbb b1 b2
2: line 1 text...
found by 'b1'
4: line 2 text... word1 word2 word3
found by 'b2'
6: line 3 text...
found by 'bbb'
avp@avp-ubu1:hashcode$
Если что-то неясно, спрашивайте.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
помогите мне отсортировать список по имени, я понятия не имею как его нормально отсортировать
Столкнулся с такой задачей как сделать форму, на которой, например, есть два виджета LineEdit и виджет карты (я взял QWebWidget и открыл в нем ЯндексКарты)
При включении любых C++ заголовков появляется ошибка в заголовках LLVM: