С++ вывести из текста самое длинное и самое короткое слово

Дан файл с текстом, вывести из текста на экран самое коротко и самое длинное слово

Если втупую, то так:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

string get_word(istream &is) {
    string w;
    is >> w;
    return w;
}

int main()
{
    setlocale(LC_ALL, "Russian");

    ifstream file("sampletext.txt");
    if (!file) {
        cerr << "Не удалось открыть файл" << endl;
        return 1;
    }

    string word, max_word, min_word;
    size_t len, max_len = 0, min_len = 1000;

    while (file) {
        word = get_word(file);
        if (word.length() == 0)
            break;
        len = word.length();
        if (len > max_len) {
            max_len = len;
            max_word = word;
        }
        if (len < min_len) {
            min_len = len;
            min_word = word;
        }
    }

    file.close();

    cout << "Самое длинное слово:  \"" << max_word << "\"" << endl
         << "Самое короткое слово: \"" << min_word << "\"" << endl;

    return 0;
}

Здесь западло в том, что если в файле реальный текст, а не специально подобранный набор слов, разделенных пробелами и переводами строки, то минимальным «словом» скорее всего будет какой нибудь знак препинания типа тире, и «слова» будут содержать знаки препинания от которых буквы не отделены пробелом. К «словам» же попадут и числа.

Поэтому я считывание слова сделал отдельной функцией. Ее надо делать более навороченной, чтобы она правильно работала с реальными текстами.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.