Помогите исправить ошибку программе

196
28 ноября 2017, 22:41

Задание:

Дан текст. Словом текста считается любая последовательность цифр; между соседними словами - не менее одного пробела. Перед первым и за последним словом каждой строки произвольное число пробелов. Найти и сохранить в каждой строке только те слова, которые образованы неубывающей последовательностью символов.

Код:

#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 символа слова, а не все.

Преподаватель сказал, что лучше использовать флаги.

Answer 1

Ну вы же тут не даете циклу даже шанса на вторую итерацию своим 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;
READ ALSO
Задача с двумерными массивами С++

Задача с двумерными массивами С++

В общем ребят, есть задача с двумерными массивамиУсловие : расставить на шахматном поле 2 белых и 2 черных слона произвольным образом и определить,...

235
Присвоение значения переменной в c++ переданной по указателю

Присвоение значения переменной в c++ переданной по указателю

Как с помощью конструктора копирования из string присвоить значению, на которое ссылается temp, значение m?

195
List C++ Удаление конкретного элемента List

List C++ Удаление конкретного элемента List

Нужно удалить второй элемент из listВсе работает как надо

196
Структурирование данных JAVA

Структурирование данных JAVA

Необходимо реализовать программу, в которой будут использоваться все модификаторы доступы - private, default, protected, public на трех уровнях наследованияТакже...

216