Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
1 / 1 / 0
Регистрация: 03.11.2015
Сообщений: 121

Отсортировать N-ую строку файла fin.txt по возрастанию длин слов в строке и записать ее в fout.txt

10.03.2016, 21:06. Показов 2221. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
не могу понять c++ , поможет кто разобраться? на паскале всё получается, а сейчас решил C++ изучить
Вот задачка:

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

Добавлено через 22 минуты
на dev c++ начал работать
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.03.2016, 21:06
Ответы с готовыми решениями:

Определить в K-ой строке файла fin.txt самое длинное слово и записать это слово и его длину в файл fout.txt
Есть задание: Определить в K-ой строке файла fin.txt самое длинное слово и сформировать текстовый файл fout.txt, в который записать это...

Считать с файла (input.txt) строку, заменить в строке латинские буквы на русские, записать файл (input.txt) эту строку
Считать с файла (input.txt) строку, заменить в строке латинские буквы на русские, записать файл (input.txt) эту строку.

Считать с файла (input.txt) строку, перевернуть строку, записать файл (put.txt) эту строку
Считать с файла (input.txt) строку, перевернуть строку, записать файл (put.txt) эту строку.

29
 Аватар для yrceus
88 / 88 / 80
Регистрация: 25.08.2013
Сообщений: 337
10.03.2016, 23:47
Первое приглашение для ввода строк в файл. Вводим пока не введем конец файла с новой строки.
Далее приглашение ввести номер строки для сортировки и записи в новый файл.
Файлы не перезаписываются, а дополняются. Первый вызов будут пустые, находятся в папке с проектом.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#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;
}
Если кто подскажет как сбросить позицию после записи файла в самое начало, не закрывая его, буду благодарен. Сам не сообразил.
1
1 / 1 / 0
Регистрация: 03.11.2015
Сообщений: 121
11.03.2016, 12:38  [ТС]
yrceus, ругается на эту строку : for (auto sym : ch) { //выбираем слова из нее
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
11.03.2016, 15:11
Цитата Сообщение от yrceus Посмотреть сообщение
Если кто подскажет как сбросить позицию после записи файла в самое начало, не закрывая его
C++
1
2
fin.clear();
fin.seekg(0);
1
 Аватар для yrceus
88 / 88 / 80
Регистрация: 25.08.2013
Сообщений: 337
11.03.2016, 15:23
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#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 (int i = 0; i < ch.size(); ++i) {          //выбираем слова из нее
        if (isalpha(ch[i]) || isdigit(ch[i]))
            words.back() += ch[i];
        else if (!words.back().empty())
            words.emplace_back();
    }
    sort(words.begin(), words.end(), ssrt);//сортируем с функ ssrt
    fin.open("fin2.txt", fstream::app);
    for (int i = 0; i < words.size(); ++i)                //записываем в новый файл отсор. строку
        fin << words[i] << ' ';
    fin << '\n';
    fin.close();
    return 0;
}
А так?

Добавлено через 3 минуты
nd2, У меня не работает почему-то так... Я пробовал. И std::beg вторым параметром у seekg, незнаю.

Добавлено через 2 минуты
22 и 23 строка, если не закрыть и открыть файл, fin.get() на 27 строке первым символом считывает -1(EOF).
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
11.03.2016, 15:26
Цитата Сообщение от yrceus Посмотреть сообщение
У меня не работает почему-то так...
Это в чём?
0
 Аватар для yrceus
88 / 88 / 80
Регистрация: 25.08.2013
Сообщений: 337
11.03.2016, 15:30
Если 22 и 23 строку
C++
1
2
fin.close();
fin.open("fin.txt");
заменить на
C++
1
2
fin.clear();
fin.seekg(0);
Добавлено через 1 минуту
fin.get() на 27 строке первым символом считывает -1(EOF).
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
11.03.2016, 15:30
Я про среду.
0
 Аватар для yrceus
88 / 88 / 80
Регистрация: 25.08.2013
Сообщений: 337
11.03.2016, 15:31
Visual Studio 2015.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
11.03.2016, 15:34
Цитата Сообщение от yrceus Посмотреть сообщение
Visual Studio 2015.
Что-то странное... В 8-й студии есть похожая заморочка (но там немного другое). Сейчас попробую у себя в 15-й.
0
 Аватар для yrceus
88 / 88 / 80
Регистрация: 25.08.2013
Сообщений: 337
11.03.2016, 15:36
Заодно, если знаете, как поставить уровень предупреждений level 4? Интересно попробовать.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
11.03.2016, 15:43
Понял, там запись была... Перед переходом к чтению, нужно буфер сбросить: flush().

Добавлено через 4 минуты
Цитата Сообщение от yrceus Посмотреть сообщение
как поставить уровень предупреждений level 4?
В свойствах проекта, С/С++, General.
1
1 / 1 / 0
Регистрация: 03.11.2015
Сообщений: 121
11.03.2016, 15:58  [ТС]
yrceus, yrceus, у вас код работает?
0
 Аватар для yrceus
88 / 88 / 80
Регистрация: 25.08.2013
Сообщений: 337
11.03.2016, 16:10
Тео, Работает, изменил последний опубликованный, тоже работает.
Где у вас проблема?
0
1 / 1 / 0
Регистрация: 03.11.2015
Сообщений: 121
11.03.2016, 16:13  [ТС]
yrceus, он не работает с файлами. в fin.txt есть текст, но он не выводит строку в fin2.txt
0
 Аватар для yrceus
88 / 88 / 80
Регистрация: 25.08.2013
Сообщений: 337
11.03.2016, 16:16
Так, может вы ошиблись. Запускаете, он предлагает ввод в первый файл. Если не нужно вводить строк вводим Ctrl+Z и Enter. Далее вводим номер строки, которую будем сортировать и записывать во второй файл.

Такие операции делаете?
0
1 / 1 / 0
Регистрация: 03.11.2015
Сообщений: 121
11.03.2016, 16:27  [ТС]
можно скрин консоли?

Добавлено через 4 минуты
yrceus, сделал так как вы сказали, не выходит

Добавлено через 3 минуты
yrceus, простите за наглость , но не скините ли вы папку с проектом? я просто уже перепробовал много вариантов
0
 Аватар для yrceus
88 / 88 / 80
Регистрация: 25.08.2013
Сообщений: 337
11.03.2016, 16:42
С кодировкой беда( Латиницу пишет на ура. Кирилицу спотыкается на 38 строке, таки дела. Надо думать.
0
1 / 1 / 0
Регистрация: 03.11.2015
Сообщений: 121
11.03.2016, 16:44  [ТС]
yrceus, пускай английский даже, не важно, я так пока хочу разобраться
0
 Аватар для yrceus
88 / 88 / 80
Регистрация: 25.08.2013
Сообщений: 337
11.03.2016, 16:47
C++
1
if (isalpha(ch[i], std::locale("rus_rus.1251")) || isdigit(ch[i], std::locale("rus_rus.1251")))
Вот, 38 строку замените, так работает)))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.03.2016, 16:47
Помогаю со студенческими работами здесь

Определить в K-ой строке файла fin.txt первое и последнее слово, поменять их местами
Дано: в текстовом файле fin.txt находится текст на русском языке. С клавиатуры вводится число K. Требуется: определить в K-ой строке...

Скопировать первую строку из каждого txt-файла в каталоге и записать в новый output.txt в том же каталоге
Добрый день! Дано: c:\folder есть папка, в ней ~50000 txt файлов, каждый под своим уникальным именем, никак не связанным с...

Переписать данные файла input.txt в файл output.txt, отсортировать их в алфавитном порядке по фамилии
Народ меня тут 11 задач мне нужно их подробно прокомментировать какая строчка что делает(пример первая задача) помогите плиз кому не...

В файле input.txt содержатся сведения о группе студентов. переписать данные файла в файл output.txt, отсортировав их по возрастанию
Добрый вечер!!! Я - новичок по работе с С++, помогите, пожалуйста, написать программу на этом языке. В файле input.txt содержатся сведения...

Записать в файл out.txt те числа из файла inp.txt, которые НЕ кратны k
Заполнить файл inp.txt N натуральными числами. Записать в файл out.txt те числа из файла inp.txt (числа считываются непосредственно из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru