+ Ответить в теме
Показано с 1 по 5 из 5

Тема: Отбросить слова при чтении из файла.

  1. #1
    dummy Mojiback is on a distinguished road
    Регистрация
    20.12.2017
    Сообщений
    4
    Вес репутации
    0

    Question Отбросить слова при чтении из файла.

    Всем доброго времени суток! Изрядно попотев, так и не смог решить задачу. Поэтому, ищу помощи здесь.
    Из произвольного текста (взятом из файла), содержащего не более 10 строк, в каждой строке не более 80 символов вывести на экран исходный текст. В тексте удалить слова заданной длины (длину задает пользователь). Вывести полученный текст на экран. Результат также записать в выходной файл, имя файла задает пользователь.
    Код по чтению текста из файла я сделал, а вот удалить слова заданной длины не получается:
    Код :
    1. #include <iostream>
    2. #include <fstream>
    3. #include <cstdlib>
    4. using namespace std;
    5. int main()
    6. {
    7.     setlocale(0, "");
    8.     ifstream file;
    9.     file.open("Текст.txt");
    10.     if (!file.is_open()) // если файл не найден
    11.     {
    12.         cout << "Ошибка! Файл не найден!" << endl;
    13.         float n;
    14.         cout << "Для продолжения нажмите любую клавишу...";
    15.         cin >> n;
    16.         exit(0);
    17.     }
    18.     static char  buff[1024][1024];
    19.     while (!file.eof()) // цикл существует до конца файла
    20.     {  
    21.         int i = 0;
    22.         file.getline(buff[i], sizeof(buff)); // записываем в buff, строчку i - файла
    23.         cout << buff[i];
    24.         cout << endl;
    25.         ++i;
    26.     }
    27.     file.close();
    28.     system("pause > 1");
    29.     return 0;
    30. }
    Рассчитываю на вашу внятную помощь, уважаемые обитатели форума.

  2. По умолчанию

     
    Хотите избавиться от рекламы? Зарегистрируйтесь
  3. #2
    Moderator Куратор
    system architect
    Absurd is on a distinguished road
    Регистрация
    26.02.2004
    Адрес
    Pietari, Venäjä
    Возраст
    38
    Сообщений
    1,213
    Вес репутации
    17

    По умолчанию Re: Решите задачку... С++

    Цитата Сообщение от Mojiback Посмотреть сообщение
    Всем доброго времени суток! Изрядно попотев, так и не смог решить задачу. Поэтому, ищу помощи здесь.
    Из произвольного текста (взятом из файла), содержащего не более 10 строк, в каждой строке не более 80 символов вывести на экран исходный текст. В тексте удалить слова заданной длины (длину задает пользователь). Вывести полученный текст на экран. Результат также записать в выходной файл, имя файла задает пользователь.
    Код по чтению текста из файла я сделал, а вот удалить слова заданной длины не получается:
    Рассчитываю на вашу внятную помощь, уважаемые обитатели форума.
    Код :
    1. #include <iostream>
    2. #include <sstream>
    3. #include <vector>
    4.  
    5. using namespace std;
    6.  
    7. vector<string> split(const string &s, char delim) {
    8.     vector<string> result;
    9.     stringstream ss(s);
    10.     string item;
    11.     while (getline(ss, item, delim)) {
    12.         result.push_back(item);
    13.     }
    14.     return result;
    15. }
    16.  
    17. int main() {
    18.     string str = "adsf+qwer+poui+fdgh";
    19.     vector<string> v = split(str, '+');
    20.     for (auto i : v) {
    21.         cout << i << endl;
    22.     }
    23.     return 0;
    24. }

    Вот код который разбивает строку на слова. Вам, наверное, нужно поменять разделитель с плюса на пробел. Потом пройтись по словам и удалить те, которые попадают под заданный критерий. Потом собрать строку обратно.
    2B OR NOT(2B) = FF

  4. #3
    Moderator Куратор
    system architect
    Romeo is on a distinguished road Аватар для Romeo
    Регистрация
    02.03.2004
    Адрес
    Крым, Севастополь
    Возраст
    36
    Сообщений
    3,082
    Вес репутации
    21

    По умолчанию Re: Решите задачку... С++

    У тебя в массив сохранится только последняя строка, потому что ты пишешь постоянно в buff[0].

    Строчку можно распарсить либо с помощью strtok, либо с помощью std::stringstream. Подробнее в MSDN.

    Если не будет получаться, пиши.

    P.S. Название темы изменил, хотя мог бы удалить тему вообще на основании правил форума. На будущее, именуй темы осмысленно.
    Последний раз редактировалось Romeo; 20.12.2017 в 19:41.
    Entites should not be multiplied beyond necessity @ William Occam
    ---
    Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
    ---
    Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.

  5. #4
    dummy Mojiback is on a distinguished road
    Регистрация
    20.12.2017
    Сообщений
    4
    Вес репутации
    0

    По умолчанию Re: Решите задачку... С++

    Цитата Сообщение от Absurd Посмотреть сообщение
    Код :
    1. #include <iostream>
    2. #include <sstream>
    3. #include <vector>
    4.  
    5. using namespace std;
    6.  
    7. vector<string> split(const string &s, char delim) {
    8.     vector<string> result;
    9.     stringstream ss(s);
    10.     string item;
    11.     while (getline(ss, item, delim)) {
    12.         result.push_back(item);
    13.     }
    14.     return result;
    15. }
    16.  
    17. int main() {
    18.     string str = "adsf+qwer+poui+fdgh";
    19.     vector<string> v = split(str, '+');
    20.     for (auto i : v) {
    21.         cout << i << endl;
    22.     }
    23.     return 0;
    24. }

    Вот код который разбивает строку на слова. Вам, наверное, нужно поменять разделитель с плюса на пробел. Потом пройтись по словам и удалить те, которые попадают под заданный критерий. Потом собрать строку обратно.
    Спасибо, конечно, за такую шикарную подсказку, а такой вариант нельзя как-либо развить?:
    Код :
    1. ofstream file2("cp.txt");
    2.     string s;
    3.     getline(file, s);
    4.     file2 << s;
    5.     system("pause > 1");
    6.     return 0;
    }
    Адски криво, но суть проста - считать строку из файла с именем file через getline в строку s, а затем из s все данные перевести в файл с именем file2? Да, по одной строчке, в цикл засунуть, потом немного подкинуть условий, и, может как-нибудь это дело поедет?

  6. #5
    Moderator Куратор
    system architect
    Absurd is on a distinguished road
    Регистрация
    26.02.2004
    Адрес
    Pietari, Venäjä
    Возраст
    38
    Сообщений
    1,213
    Вес репутации
    17

    По умолчанию Re: Решите задачку... С++

    Цитата Сообщение от Mojiback Посмотреть сообщение
    Спасибо, конечно, за такую шикарную подсказку, а такой вариант нельзя как-либо развить?:
    Код :
    1. ofstream file2("cp.txt");
    2.     string s;
    3.     getline(file, s);
    4.     file2 << s;
    5.     system("pause > 1");
    6.     return 0;
    }
    Адски криво, но суть проста - считать строку из файла с именем file через getline в строку s, а затем из s все данные перевести в файл с именем file2? Да, по одной строчке, в цикл засунуть, потом немного подкинуть условий, и, может как-нибудь это дело поедет?
    Ну да, так и правильно. По одной строчке. Если еще не EOF, берешь строку s, передаешь ее моей функции split, получаешь массив (vector) из слов. Идешь циклом по этому вектору, отправляешь в выходной файл те строки которые не попадают под критерий отсечения. Отправляешь в выходной файл символ перевода строки (\n). Возвращаешься к шагу 1.
    2B OR NOT(2B) = FF

+ Ответить в теме

Похожие темы

  1. С++ удалить из файла повторяющиеся слова
    Текст находится в файле, имя которого вводится с клавиатуры. Вывод результата также осуществляется одновременно в файл, имя которого вводится с...
    от h0h0h0 в разделе задачи на C и C++
  2. Excel. Ссылка из одного файла на ячейку другого файла
    Добрый день. Если есть возможность, то прошу помочь в следующей задаче: 1. Имеется файл 1.xls со списком Ф.И.О. 2. Необходимо из файла 2.xls...
    от JuRMaN в разделе MS Office и VB(A).
  3. Ошибка при чтении файла
    Я хочу с файла прочесть все строки, вот код: #include "stdafx.h" #include <iostream> #include <conio.h> using namespace std; int main(int...
    от Stock в разделе C и C++
  4. и еще раз вопрос о чтении данных из текстового файла
    Добрый день. Необходимо считать данные из файла по строчно и записать их в лист екселя вот код(автор Aent) который записывает все значения в...
    от Temr в разделе MS Office и VB(A).
  5. Проблема с русскими символами в Exel при чтении из dbf
    Привет! Не могу справиться с проблемой: при чтении данных из dbf файла, открытого в Exel с помощью компонентов ADO, вместо русских символов...
    от Anonymous в разделе MS Office и VB(A).

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения