Задание:
Дан текст. Словом текста считается любая последовательность цифр; между соседними словами - не менее одного пробела. Перед первым и за последним словом каждой строки произвольное число пробелов. Найти и сохранить в каждой строке только те слова, которые образованы неубывающей последовательностью символов.
Код:
#include <iostream>
#include <sstream>
#include <fstream>
using namespace std;
int main()
{
setlocale(LC_ALL,"russian");
ifstream file;
file.open("text.txt");
string line, word;
ostringstream outline;
cout << "Файл до обработки: " << endl;
while (getline(file, line))
{
cout << line << endl;
istringstream iss(line);
while (iss >> word)
{
for (int i = 0; i < word.size(); i++)
{
if (word[i] < word[i+1] )
{
outline << word<<' ';
}
break;
}
}
}
cout << endl << "Файл после обработки:" << endl;
cout << outline.str();
file.close();
system("pause");
return 0;
}
Проблема в том, что проверяются только 2 символа слова, а не все.
Преподаватель сказал, что лучше использовать флаги.
Ну вы же тут не даете циклу даже шанса на вторую итерацию своим break. Правда, это спасает вас от выхода за границы слова при i == word.size()-1.
for (int i = 0; i < word.size(); i++)
{
if (word[i] < word[i+1] )
{
outline << word<<' ';
}
break;
}
Я бы делал примерно так (не компилировал, чисто как намек):
bool ok = true;
for (int i = 0; i < word.size()-1; i++)
{
if (!isdigit(word[i]) || word[i] >= word[i+1])
{
ok = false; break;
}
}
if (ok) cout << word << endl;
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости