Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2016, 15:05   #1
r/t
Новичок
Джуниор
 
Регистрация: 11.03.2016
Сообщений: 1
По умолчанию работа с текстом в C++

Задача :

В текстовом файле fin.txt находится текст на русском языке. С клавиатуры вводится число N.
Цель: отсортировать N-ую строку файла fin.txt по возрастанию длин слов в строке и сформировать текстовый файл fout.txt, в который записать измененную строку.

Вот есть код, который не работает :

Код:
#include <iostream>
#include <vector>
#include <string>
#include <fstream>
#include <Windows.h>
#include <algorithm>
using namespace std;
bool ssrt(string &a, string &b) { // для сорт. вектора слов
    return a.size() > b.size();
}
int main()
{   
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    fstream fin("fin.txt", fstream::app);
    string ch;
    while (getline(cin, ch)) { //вводим строку
        ch += '\n';
        fin << ch;              //отпр. ее в файл
    }
    ch.clear();
    fin.close();
    fin.open("fin.txt");        //сбрасываем позицию
    cin.clear();                //сбрасываем флаг EOF
    int x, sym, y = 0; cin >> x;//вводим какую строку читаем и сортируем
    if (x > 1) {
        while ((sym = fin.get()) != EOF)
            if (sym == '\n')    //ищем эту строку
                if (++y == x - 1)
                    break;
        getline(fin, ch);       //переписываем ее в string
    }
    else if (x > 0) getline(fin, ch);//если в первой строке
    if (x - 1 != y || !x)   return 0;
    vector<string> words(1);
    fin.close();
    for (auto sym : ch) {          //выбираем слова из нее
        if (isalpha(sym) || isdigit(sym))
            words.back() += sym;
        else if (!words.back().empty())
            words.emplace_back();
    }
    sort(words.begin(), words.end(), ssrt);//сортируем с функ ssrt
    fin.open("fin2.txt", fstream::app);
    for (auto x : words)                //записываем в новый файл отсор. строку
        fin << x << ' ';
    fin << '\n';
    fin.close();
    return 0;
}
подскажите что не так? или возможно есть другие варианты? просто я только начал изучать c++


_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 11.03.2016 в 15:11.
r/t вне форума Ответить с цитированием
Старый 11.03.2016, 19:49   #2
b2soft
Упртй программер
Форумчанин
 
Регистрация: 26.11.2009
Сообщений: 150
По умолчанию

Не работает вообще или неправильно работает?
Помощь с кодом/лабами по С/С++
Контакты: ICQ 623334555 Skype: btwosoft; Mail: b2soft@yandex.ru

Последний раз редактировалось b2soft; 11.03.2016 в 19:52.
b2soft вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с текстом Yrec Паскаль, Turbo Pascal, PascalABC.NET 1 18.05.2012 16:54
Работа с текстом equ1 C# (си шарп) 4 26.04.2012 15:54
Работа с текстом Skalp Помощь студентам 4 08.01.2012 23:40
работа с текстом nejimakc Помощь студентам 6 09.11.2010 17:37
работа с текстом в си++ Sjava Помощь студентам 3 21.12.2008 11:54