Пытаюсь вывести предложение с указанным искомым словом, но программа не выводит полностью всё предложение, а лишь часть текста.
while (1)
{
int begining_pos = text.find(search); // начало строки
int crt_pos; // текущая позиция
crt_pos = text.find(search); // ищу позицию искомого слова
if (crt_pos == -1)
break;
// если предложений с таким словом нет,
// то выхожу из цикла
// ищу начало строки
for (int i = crt_pos; ; i--)
{
if (text[i] != '!' && text[i] != '.' && text[i] != '?' && i != 0)
begining_pos--;
else
{
crt_pos = i;
if (crt_pos > 0)
begining_pos++; // начало строки
break;
}
}
// записываю строку
for (crt_pos = begining_pos; ; crt_pos++)
{
if (text[crt_pos] == '!' || text[crt_pos] == '.' || text[crt_pos] == '?' || (int)text[crt_pos] == -1)
{
result += text[crt_pos];
break;
}
if (crt_pos == begining_pos && text[crt_pos] == ' ') continue;
result += text[crt_pos]; // записал строку в 'result'
}
// вывожу результат
cout << result << endl << endl;
text.erase(begining_pos, crt_pos + 1); // удаляю из текста найденую строку
result = ""; // очищаю результат
}
Вот пример:
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
setlocale(LC_ALL, "Russian");
string text = ""; // текст записанный из файла
string search; // искомое слово
string result; // результат поиска
string filename = "rus.txt"; // имя файла
// файл в котором будет осуществляться поиск
ifstream *in = new ifstream(filename.data());
if (in->fail())
{
cout << "Файл '" << filename << "' не найден! " << endl << endl;
system("pause");
return 1;
}
// пользователь вводит искомое слово
cout << "Введите искомое слово: ";
cin >> search;
// записываю содержимое файла
if (in->is_open())
{
while (!in->eof())
text += in->get();
in->close();
}
delete in;
Вот описание всех строк и начало программы.
ASCII "я" в cp1251 имеет код 255, что тождественно -1 в signed char
Вы можете сравнивать crt_pos
с длиной строки, например
Виртуальный выделенный сервер (VDS) становится отличным выбором
Добрый деньИмеется основная форма (ApplicationWindow), на которой есть активный элемент
Я вызываю QColorDialog примерно так:
Как используется boost::variant (в частности apply_visitor)?