Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.80/40: Рейтинг темы: голосов - 40, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 07.12.2016
Сообщений: 18

Удалить из текста все вхождения заданного слова

07.12.2016, 15:42. Показов 7966. Ответов 36
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Суть в следующем: из произвольного текста ( Не понимать друг друга плохо -
не понимать и обнимать,
и все же, как это ни странно,
но так же страшно, так же так
во всем друг друга понимать.
Тем и другим себя мы раним.
И, наделен познаньем ранним,
я душу нежную твою
не оскорблю непониманьем
и пониманьем не убью.) нужно удалить все входжения заданного слова ( в моём случае слово : друг). Я все сделал, но суть в том, что программа удаляет все верно, но от слова "другим" остается "м". Я не знаю что делать. Вот код :

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
51
52
53
54
55
56
57
58
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <conio.h>
#include <Windows.h>
#include <string>
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
 
 
    ifstream is("Text.txt");
    ifstream f("Text.txt");
    int a = 0;
    int count = 0;
    char word[80], str[80], *p = str;
    char text[800] = "";
 
    while (f.getline(str, 80))
    {
        cout << str << "\n";
 
    }
 
 
    cout << "Введите слово для исключения: ";
    cin >> word;
    int len = strlen(word);
 
    while (is.getline(str, 80))
    {
        while ((p = strstr(str, word)) != NULL)
        {
            strcpy_s(p, strlen(p), p + len + 1);
            count++;
        }
        strcat_s(text, str);
        strcat_s(text, "\n");
    }
    is.close();
 
    string File;
    cout << "Введите имя файла, в который необходимо продублировать выводимую информацию: ";
    cin >> File;
    ofstream os(File);
 
    cout << "Количество вырезанных из текста слов "" << word << "" = " << count << endl;
    os << "Количество вырезанных из текста слов "" << word << "" = " << count << endl;
    cout << "Полученный текст:\n" << text;
    os << "Полученный текст:\n" << text;
    os.close();
 
    _getch();
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.12.2016, 15:42
Ответы с готовыми решениями:

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

Удалить из каждого третьего слова заданного текста слова все предыдущие вхождения последней буквы
Дана последовательность слов.Напечатать все слова,предварительно преобразив каждое третье по следующему правилу:Удалить из слова все...

Удалить из строки все находящиеся в ней слова «студент» и определить все позиции вхождения этого слова
Удалить из строки все находящиеся в ней слова «студент» и определить все позиции вхождения этого слова. Помогите,пожалуйста, алгоритм и...

36
0 / 0 / 0
Регистрация: 07.12.2016
Сообщений: 18
07.12.2016, 19:24  [ТС]
Студворк — интернет-сервис помощи студентам
gru74ik, Спасибо большое за помощь
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
07.12.2016, 19:25
Vadim_c, не учитываешь разные окончания у слов: друг - удаляется, друга - удаляется, другим - удаляет други, а м оставляет.
0
0 / 0 / 0
Регистрация: 07.12.2016
Сообщений: 18
07.12.2016, 19:27  [ТС]
gru74ik, вот я и пытаюсь чтобы и м удалило , но что то идет не так
0
370 / 133 / 44
Регистрация: 05.02.2015
Сообщений: 901
07.12.2016, 19:34
извините, но я тоже не знаю, что такое getline(). cin.getline() - знаю.

Добавлено через 1 минуту
C++
1
cin.getline(string, streamsize, separator)
п.с. ссылку на всякий случай не даю, вроде другой форум, по правилам нельзя.
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
07.12.2016, 19:39
Цитата Сообщение от gru74ik Посмотреть сообщение
Лекарство:
Очень плохая идея:
http://stackoverflow.com/quest... ot-allowed
или если сможете продраться сквозь мало аргументированную дискуссию:
В чём разница между string и символьными массивами?
на форуме было и более годное объяснение, но ту тему, увы, не нашел.

Да и использовать старые C-функции вместе с C++... как минимум странно. Советую ТС переписать все на C++.
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
07.12.2016, 19:40
Цитата Сообщение от minore Посмотреть сообщение
я тоже не знаю, что такое getline()
Читайте: раз и два.

Добавлено через 31 секунду
Цитата Сообщение от S_el Посмотреть сообщение
Советую ТС переписать все на C++.
Он не умеет. А я как раз этим сейчас занимаюсь.
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
07.12.2016, 19:40
Лучше всего здесь подойдут регулярные выражения
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
07.12.2016, 19:40
Цитата Сообщение от S_el Посмотреть сообщение
использовать старые C-функции вместе с C++... как минимум странно
Согласен. Как говорится, плюс много.
0
370 / 133 / 44
Регистрация: 05.02.2015
Сообщений: 901
07.12.2016, 19:52
т.е. cin.getline и getline(cin) - это одно и тоже, или нет? я всегда пользовался именно cin.getline() и cin.ignore() соответственно. простите, что отвлекаю, просто правда интересно. вводить на консоль именно с помощью getline() не видел. вот в файл писать - это да. а на консоль...
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
07.12.2016, 20:09
minore, нет, это не одно и то же: std::cin.getline() - это функция-член, а std::getline() - это глобальная функция. . И работают они маленько по-разному.

Добавлено через 12 минут
Вот попытался на C++ переписать, но всё равно не работает так, как надо.
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
#include "stdafx.h"
#include <iostream>
#include <string>
#include <cstddef>
#include <fstream>
#include <Windows.h>
 
int main()
{
    SetConsoleCP( 1251 );
    SetConsoleOutputCP( 1251 );
 
    std::ifstream fin( "Text.txt" );
    
    std::string word;
    std::string text;
 
    while ( std::getline( fin, text ) )
    {
        std::cout << text << "\n";
    }
 
    std::cout << "\nВведите слово для исключения: ";
    std::cin >> word;
 
    std::size_t found = text.find( word );
    std::size_t counter = 0;
    while ( found != std::string::npos )
    {
        text.erase( found, word.size() );
        found = text.find( word, found + 1);
        ++counter;
    }
 
    std::cout << text << '\n';
 
    fin.close();
 
    std::string filename;
    std::cout << "Введите имя файла, в который необходимо продублировать выводимую информацию: ";
    std::cin >> filename;
    std::ofstream fout( filename );
 
    std::cout << "Количество вырезанных из текста слов " << word << " = " << counter << std::endl;
    fout << "Количество вырезанных из текста слов " << word << " = " << counter << std::endl;
    std::cout << "Полученный текст:\n" << text;
    fout << "Полученный текст:\n" << text;
    fout.close();
}
Печаль. И время уже - спать пора.
0
0 / 0 / 0
Регистрация: 07.12.2016
Сообщений: 18
07.12.2016, 20:14  [ТС]
gru74ik, печаль Все равно спасибо за помощь! и потраченное время эх..
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
07.12.2016, 20:15
Vadim_c, завтра если время будет, ещё поковыряю.
0
370 / 133 / 44
Регистрация: 05.02.2015
Сообщений: 901
07.12.2016, 22:03
Лучший ответ Сообщение было отмечено gru74ik как решение

Решение

сделал задачку:
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
#include <iostream>
#include <fstream>
#include <string>
#include <Windows.h>
using namespace std;
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
string input_file, output_file, read_file, word;
cout << "введите путь к считываемому файлу" << endl;
cin >> input_file;
ifstream input(input_file, ios::in);
if (!input)
cout << "Не верно задано имя файла" << endl;
else
{
cout << "Введите путь к выходному файлу" << endl;
cin >> output_file;
ofstream output(output_file, ios::app);
 
cout << "введите слово, которое нужно удалить" << endl;
cin >> word;
while (!input.eof())
{
input >> read_file;
if (read_file.find(word) ==-1)
output << read_file << " ";
 
}
input.close();
output.close();
}
return 0;
 
}
2
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
08.12.2016, 05:27
minore, круто. А как он работает? Каким образом учитываются окончания в слове друг? Магия какая-то.
0
22 / 56 / 9
Регистрация: 29.09.2011
Сообщений: 618
08.12.2016, 05:56
gru74ik,
Я так понимаю, в read_file читается пословно, а .find() отвечает содержиться ли искомая строчка или нет. Так как мы ищем "друг", то будут удаляться все слова содержащие "друг", т.е. "друга", "другом", "друг123", "вдруг", но не "дрог".
Как - то так.
http://www.cplusplus.com/refer... ring/find/
1
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
08.12.2016, 06:09
Цитата Сообщение от _20_ Посмотреть сообщение
read_file читается пословно
Простое элегантное решение. Как я сам до такого не догадался? Круть.
0
0 / 0 / 0
Регистрация: 07.12.2016
Сообщений: 18
08.12.2016, 16:45  [ТС]
Всем большое спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.12.2016, 16:45

Создать очередь, содержащую слова. Удалить из очереди все повторяющиеся слова, оставив только их первые вхождения
#include &lt;iostream&gt; using namespace std; struct queue { int inf; queue *next; }; void push(queue *&amp;h, queue *&amp;t, int x) { ...

Удалить из строки все вхождения заданного символа
12. Преобразовать заданную строку следующим образом: удалить из строки все вхождения заданного символа; Соль в том что это нужно...

Удалить во всех строках заданного текста первые вхождения введенного пользователем символа
Разработать алгоритм и программу. Вводится последовательно N строк (1&lt;=N&lt;=20), длина которых не должна превышать 20 символов. Строки должны...

Изъять из заданного текста все повторные вхождения слов
Задан текст, слова в котором разделены пробелами и знаками препинания Разработать программу, которая изымает из этого текста все...

Удалить из слова все предыдущие вхождения последней буквы
Дана последовательность, содержащая от 2 до 30 слов, в каждом из которых от 2 до 10 строчных латинских букв; между соседними словами –...


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

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Новые блоги и статьи
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru