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

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

07.12.2016, 15:42. Просмотров 976. Ответов 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)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.12.2016, 15:42
Ответы с готовыми решениями:

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

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

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

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

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

36
minore
251 / 125 / 43
Регистрация: 05.02.2015
Сообщений: 727
07.12.2016, 16:04 #2
а вам слово "другим" нужно удалять или оставлять. если удалять, то тут только регулярные выражения, если оставлять: ну проверяйте не слово "друг" а "друг ". т.е. к введенному слову добавляйте пробел. так же можно несколько раз проверять: с пробелом, точкой и другими знаками препинания.
0
Vadim_c
0 / 0 / 0
Регистрация: 07.12.2016
Сообщений: 18
07.12.2016, 16:38  [ТС] #3
его тоже нужно удалить, я проверил сейчас с пробелами и т д, не помогает , "м" остается и все

Добавлено через 1 минуту
Цитата Сообщение от Vadim_c Посмотреть сообщение
";
Цитата Сообщение от Vadim_c Посмотреть сообщение
strcpy_s(p, strlen(p), p + len + 1);
насколько я понимаю проблема в этой строчке

Добавлено через 23 минуты
minore, его тоже нужно удалить, я проверил сейчас с пробелами и т д, не помогает , "м" остается и все. strcpy_s(p, strlen(p), p + len + 1);
насколько я понимаю проблема в этой строчке
0
VAN0
58 / 58 / 53
Регистрация: 05.05.2013
Сообщений: 150
Завершенные тесты: 1
07.12.2016, 17:31 #4
Цитата Сообщение от Vadim_c Посмотреть сообщение
я проверил сейчас с пробелами и т д, не помогает , "м" остается и все
как проверял?
C++
1
cin >> word;
по-умолчанию при чтении из стандартного потока ввода отбрасывается пробелы, может в этом дело?
0
Vadim_c
0 / 0 / 0
Регистрация: 07.12.2016
Сообщений: 18
07.12.2016, 17:39  [ТС] #5
VAN0, а как это исправить ? Можете подсказать?
0
VAN0
58 / 58 / 53
Регистрация: 05.05.2013
Сообщений: 150
Завершенные тесты: 1
07.12.2016, 18:04 #6
Цитата Сообщение от Vadim_c Посмотреть сообщение
как это исправить
конкатенацией word с пробелом (пробел в двойных кавычках) после его считывания из стандартного потока ввода
1
Vadim_c
0 / 0 / 0
Регистрация: 07.12.2016
Сообщений: 18
07.12.2016, 18:10  [ТС] #7
VAN0,почему я Вас не понимю
0
sourcerer
Модератор
Эксперт CЭксперт С++
4832 / 2023 / 315
Регистрация: 20.02.2013
Сообщений: 5,431
Записей в блоге: 24
Завершенные тесты: 1
07.12.2016, 18:12 #8
Цитата Сообщение от Vadim_c Посмотреть сообщение
VAN0, почему я Вас не понимаю
Vadim_c, потому что не владеете терминологией предметной области. То есть, терминологией, принятой в сообществе разработчиков, пишуших на языке программирования C++.
0
Vadim_c
0 / 0 / 0
Регистрация: 07.12.2016
Сообщений: 18
07.12.2016, 18:15  [ТС] #9
gru74ik, я новичек в этой области и пытаюсь учиться на книжках и статьях и если честно не понимаю, почему нельзя просто написать так , как должно быть , чтобы в последующих работах я это знал?
0
sourcerer
Модератор
Эксперт CЭксперт С++
4832 / 2023 / 315
Регистрация: 20.02.2013
Сообщений: 5,431
Записей в блоге: 24
Завершенные тесты: 1
07.12.2016, 18:22 #10
Vadim_c, Вы задали вопрос, я Вам ответил.

Добавлено через 57 секунд
Цитата Сообщение от Vadim_c Посмотреть сообщение
пытаюсь учиться на книжках
Правильный подход. Вот именно там и смотрите значение терминов.

Добавлено через 39 секунд
Vadim_c, а какие именно термины показались Вам непонятными?
0
Vadim_c
0 / 0 / 0
Регистрация: 07.12.2016
Сообщений: 18
07.12.2016, 18:22  [ТС] #11
VAN0, Вы не могли бы показать это конкретно на моем примере?
0
sourcerer
Модератор
Эксперт CЭксперт С++
4832 / 2023 / 315
Регистрация: 20.02.2013
Сообщений: 5,431
Записей в блоге: 24
Завершенные тесты: 1
07.12.2016, 18:26 #12
Vadim_c, чтобы пробелы не отбрасывались, используй функцию std::getline:
C++
1
2
std::string text;
std::getline( std::cin, text );
0
Vadim_c
0 / 0 / 0
Регистрация: 07.12.2016
Сообщений: 18
07.12.2016, 18:43  [ТС] #13
gru74ik, спасибо, но в программе возникла ошибка
0
sourcerer
Модератор
Эксперт CЭксперт С++
4832 / 2023 / 315
Регистрация: 20.02.2013
Сообщений: 5,431
Записей в блоге: 24
Завершенные тесты: 1
07.12.2016, 18:45 #14
Цитата Сообщение от Vadim_c Посмотреть сообщение
спасибо, но в программе возникла ошибка
Попробую задействовать свои телепатические способности.
0
Vadim_c
0 / 0 / 0
Регистрация: 07.12.2016
Сообщений: 18
07.12.2016, 18:47  [ТС] #15
gru74ik, отсутвуют экземпляры перегружена функция... мне кажется я не туда вставляю это
0
sourcerer
Модератор
Эксперт CЭксперт С++
4832 / 2023 / 315
Регистрация: 20.02.2013
Сообщений: 5,431
Записей в блоге: 24
Завершенные тесты: 1
07.12.2016, 18:49 #16
Vadim_c, Вы скриншот ошибки можете выложить? Или так и будем в телепатов играть?
0
Vadim_c
0 / 0 / 0
Регистрация: 07.12.2016
Сообщений: 18
07.12.2016, 18:53  [ТС] #17
gru74ik,
0
Миниатюры
Удалить из текста все вхождения заданного слова  
sourcerer
Модератор
Эксперт CЭксперт С++
4832 / 2023 / 315
Регистрация: 20.02.2013
Сообщений: 5,431
Записей в блоге: 24
Завершенные тесты: 1
07.12.2016, 18:57 #18
Vadim_c, так естественно, функция stcat_s() - чисто сишная, и принимает она в качестве аргумента сишные строки (массивы, заканчивающиеся символом '\0'), а Вы ей в качестве аргумента передаёте плюсовую строку типа std::string. Лекарство:
C++
1
2
strcat_s( text.c_str(), str );
strcat_s( text.c_str(), "\n" );
0
Vadim_c
0 / 0 / 0
Регистрация: 07.12.2016
Сообщений: 18
07.12.2016, 19:02  [ТС] #19
gru74ik, тоже самое, может нужно
std::string text;
std::getline( std::cin, text );
куда то в другое место вставлять?
0
Миниатюры
Удалить из текста все вхождения заданного слова  
sourcerer
Модератор
Эксперт CЭксперт С++
4832 / 2023 / 315
Регистрация: 20.02.2013
Сообщений: 5,431
Записей в блоге: 24
Завершенные тесты: 1
07.12.2016, 19:12 #20
Vadim_c, функцию std::getline надо использовать вместо обычного std::cin, например в Вашем коде:
C++
1
2
3
4
5
6
// вместо:
std::cin >> word;   // если будет фраза с пробелами, то считается только
                    // первое слово, а всё, что после пробела - отбросится
                    
// делаем так:
std::getline( std::cin, word );
Но Вас это не спасёт, так что забудьте. Сейчас попробую разобраться, в чём там у Вас проблема.
1
07.12.2016, 19:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.12.2016, 19:12

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

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

Удалить одинаковые слова из заданного текста
Написать программу и составить блок-схему: Задан текст. Между словами -...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru