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

Удаление одинаковых слов в строке

06.09.2012, 20:31. Показов 7813. Ответов 31
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
добрый вечер, была такая задача -удалить из строки одинаковые -подряд идущие слова. подскажите, это нужно каждую букву сравнивать ? и как написать что бы удалялись именно подряд идущие слова? программа на с++
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.09.2012, 20:31
Ответы с готовыми решениями:

Удаление одинаковых слов в строке
#include "stdafx.h" #include "iostream" #include "conio.h" using namespace std; int...

Удаление одинаковых слов в строке
Здравствуйте, задача заключается в удалении одинаковых слов в строке. Пытался решить, но не доходит...

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

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

31
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
08.09.2012, 01:37 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от alsav22 Посмотреть сообщение
В том смысле, что в вашем коде нет сохранения строки без дубликатов, а в моём есть. Отсюда мой код выглядит сложнее. Если в ваше коде сделать не просто вывод, а сохранение обработанной строки в каком-либо контейнере, то код будет нисколько не проще моего.
Да ёпэрэсэтэ!
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
#include <iostream>
#include <string>
#include <sstream>
#include <list>
#include <algorithm>
#include <iterator>
 
int main() {
    std::string str;
    std::list<std::string> list;
    
    while ( std::cout << "String: " && std::getline(std::cin, str) && ! str.empty() ) {
        std::istringstream ist(str);
        std::string prev = "";
        std::ostringstream ost;
        
        while ( ist >> str ) {
            if ( str != prev ) {
                ost << str << ' ';
                prev = str;
            }
        }
        
        list.push_back(ost.str());
    }
    
    std::cout << "All strings without doubling words:" << std::endl;
    std::copy(list.begin(), list.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
    
    return 0;
}
Добавлено через 1 минуту
Цитата Сообщение от ForEveR Посмотреть сообщение
Стандартные средства в большинстве случаев лучше собственных реализаций тех же идей.
Полностью согласен, но тут случай не то, чтоб сложный. Да и как-раз для студентов.
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
08.09.2012, 01:50 22
Цитата Сообщение от ForEveR Посмотреть сообщение
alsav22, Да вообще как бэ без проблем сохранить в коде easybudda.
Например:
C++
1
2
3
4
5
6
7
std::vector<std::string> list;
while ( ist >> str ) {
 if ( str != prev ) {
 list.push_back(str);
 prev = str;
 }
 }
Конечно, без проблем. Кто спорит? И при таком варианте, какой код будет проще? Этот или этот:Удаление одинаковых слов в строке

Добавлено через 11 минут

Не по теме:

Цитата Сообщение от ForEveR Посмотреть сообщение
Так же определенно можно использовать std::ostringstream, затем взять из него строку, записать в std::istringstream и записать в контейнер. Только для чего? В данной задаче этого не требовалось.
Конечно можно. Только разговор уже зашёл о другом. Началось ведь с этого:
Цитата Сообщение от easybudda Посмотреть сообщение
Как всё сложно

0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
08.09.2012, 01:59 23
alsav22, Вы разницы между сохранением полученных строк в контейнер и контейнером с отдельными словами из строки совсем не замечаете?
0
alsav22
08.09.2012, 02:17
  #24

Не по теме:

Цитата Сообщение от easybudda Посмотреть сообщение
alsav22, Вы разницы между сохранением полученных строк в контейнер и контейнером с отдельными словами из строки совсем не замечаете?
Замечаю. И что из этого? В таком случае, вы разницу между этим:
C++
1
2
for (auto i = lst.begin(); i != lst.end(); i++) 
     cout << *i << ' ';
и этим:
C++
1
2
3
4
5
6
while ( ist >> str ) {
            if ( str != prev ) {
                ost << str << ' ';
                prev = str;
            }
        }
замечаете?

0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
08.09.2012, 02:32 25
alsav22, а вот попробуйте своим чудо-способом три строки обработать, сохранить а потом построчно вывести...

Добавлено через 1 минуту
Цитата Сообщение от alsav22 Посмотреть сообщение
В таком случае, вы разницу между этим и этим замечаете?
Ага. У меня всей возни с сохранением отдельных слов в контейнер и последующей его обработкой просто нет - всё сразу происходит.
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
08.09.2012, 02:52 26
Цитата Сообщение от easybudda Посмотреть сообщение
Ага. У меня всей возни с сохранением отдельных слов в контейнер и последующей его обработкой просто нет - всё сразу происходит.
Вы это серьёзно? Принципиально мой код от вашего отличается только тем, что я использую готовый метод unique(), а вы свой.

Добавлено через 5 минут
Цитата Сообщение от easybudda Посмотреть сообщение
alsav22, а вот попробуйте своим чудо-способом три строки обработать, сохранить а потом построчно вывести...
Это что будет сложнее, чем вашим?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
08.09.2012, 02:54 27
Цитата Сообщение от alsav22 Посмотреть сообщение
Вот так в list будут уже не отдельные слова, а строка целиком
Это с какого перепуга? В списке всё те же слова по отдельности, только к ним пробелы приделаны. Ещё раз: три строки и желательно с префиксами вроде
string 1: ...
string 2: ...
string 3: ...
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
08.09.2012, 03:09 28
Цитата Сообщение от easybudda Посмотреть сообщение
Это с какого перепуга?
Это я исправил.
Цитата Сообщение от easybudda Посмотреть сообщение
Ещё раз: три строки и желательно с префиксами вроде
string 1: ...
string 2: ...
string 3: ...
Ваш код предложите.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
08.09.2012, 03:20 29
Цитата Сообщение от alsav22 Посмотреть сообщение
Ваш код предложите.
21 пост - строки вводятся, пока в пустой строке enter не нажать, а потом выводятся все сразу, но, что важно, построчно, а не всё подряд через пробелы...
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
08.09.2012, 04:33 30
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
#include<iostream>
#include <list>
#include <vector>
#include <string>
#include <sstream>
using namespace std;
 
int main()
{
 string input;
 vector<list<string> > vec; 
 
 while (cout << "String: " && getline(cin, input) && ! input.empty() ) 
 {
    list <string> lst; 
    stringstream ss; 
    
    ss << input; 
    
    while (ss >> input)
    { 
        input = input + ' ';
        lst.push_back(input);
    } 
 
    lst.unique();
    vec.push_back(lst); 
 }   
    
    cout << "All strings without doubling words:" << endl;
    for (auto i = vec.begin(); i != vec.end(); i++)
    {
        for (auto j = i -> begin(); j != i -> end(); j++)
               cout << *j;
        cout << endl;
    }
          
 system("pause");
 return 0;
}
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
08.09.2012, 05:54 31
Цитата Сообщение от alsav22 Посмотреть сообщение
vector<list<string> > vec;
Ну это - да, куда уж проще!
9 пост ещё раз посмотрите - там хороший пример.
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
08.09.2012, 06:08 32
Цитата Сообщение от easybudda Посмотреть сообщение
Ну это - да, куда уж проще!
И в чём он сложнее, чем ваш?

Цитата Сообщение от easybudda Посмотреть сообщение
9 пост ещё раз посмотрите - там хороший пример.
Хороший, но для одной строки.
0
08.09.2012, 06:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.09.2012, 06:08
Помогаю со студенческими работами здесь

Удаление одинаковых слов в векторе типа string
Ай даже не буду ходить вокруг да около, просто скажу, что реализую задание (лично для себя...

Найти количество одинаковых слов в строке
#include &lt;iostream&gt; using namespace std; int main() { char str1 = &quot;to be or not to be&quot;; ...

Cтроки, vector. Посчитать количество одинаковых слов в строке
Дана строка текста разделена пробелами, символами &quot;,&quot; и &quot;;&quot;.Посчитать количество одинаковых слов в...

Удаление и замена слов в строке
Здравствуйте! Помогите, пожалуйста написать программу! Дана последовательность строк. Каждая...


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

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru