Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 5.00
Serraya
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 20
06.09.2012, 20:31     Удаление одинаковых слов в строке #1
добрый вечер, была такая задача -удалить из строки одинаковые -подряд идущие слова. подскажите, это нужно каждую букву сравнивать ? и как написать что бы удалялись именно подряд идущие слова? программа на с++
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2012, 20:31     Удаление одинаковых слов в строке
Посмотрите здесь:

C++ Посчитать сколько слов в строке начинается с буквы "т" 2. Ввести фразу. Все последовательности одинаковых символов заменить на выражение N(C)
C++ Проход по массиву и удаление одинаковых слов
Удаление одинаковых слов в строке C++
Количество слов в заданной строке (для каждого из слов) C++
Найти количество одинаковых слов в строке C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
08.09.2012, 01:37     Удаление одинаковых слов в строке #21
Цитата Сообщение от 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 Посмотреть сообщение
Стандартные средства в большинстве случаев лучше собственных реализаций тех же идей.
Полностью согласен, но тут случай не то, чтоб сложный. Да и как-раз для студентов.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 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 Посмотреть сообщение
Как всё сложно

easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
08.09.2012, 01:59     Удаление одинаковых слов в строке #23
alsav22, Вы разницы между сохранением полученных строк в контейнер и контейнером с отдельными словами из строки совсем не замечаете?
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;
            }
        }
замечаете?

easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
08.09.2012, 02:32     Удаление одинаковых слов в строке #25
alsav22, а вот попробуйте своим чудо-способом три строки обработать, сохранить а потом построчно вывести...

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

Добавлено через 5 минут
Цитата Сообщение от easybudda Посмотреть сообщение
alsav22, а вот попробуйте своим чудо-способом три строки обработать, сохранить а потом построчно вывести...
Это что будет сложнее, чем вашим?
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
08.09.2012, 02:54     Удаление одинаковых слов в строке #27
Цитата Сообщение от alsav22 Посмотреть сообщение
Вот так в list будут уже не отдельные слова, а строка целиком
Это с какого перепуга? В списке всё те же слова по отдельности, только к ним пробелы приделаны. Ещё раз: три строки и желательно с префиксами вроде
string 1: ...
string 2: ...
string 3: ...
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.09.2012, 03:09     Удаление одинаковых слов в строке #28
Цитата Сообщение от easybudda Посмотреть сообщение
Это с какого перепуга?
Это я исправил.
Цитата Сообщение от easybudda Посмотреть сообщение
Ещё раз: три строки и желательно с префиксами вроде
string 1: ...
string 2: ...
string 3: ...
Ваш код предложите.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
08.09.2012, 03:20     Удаление одинаковых слов в строке #29
Цитата Сообщение от alsav22 Посмотреть сообщение
Ваш код предложите.
21 пост - строки вводятся, пока в пустой строке enter не нажать, а потом выводятся все сразу, но, что важно, построчно, а не всё подряд через пробелы...
alsav22
5282 / 4801 / 442
Регистрация: 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;
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
08.09.2012, 05:54     Удаление одинаковых слов в строке #31
Цитата Сообщение от alsav22 Посмотреть сообщение
vector<list<string> > vec;
Ну это - да, куда уж проще!
9 пост ещё раз посмотрите - там хороший пример.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.09.2012, 06:08     Удаление одинаковых слов в строке
Еще ссылки по теме:

Задача о строке. Удаление дубликатов слов C++
Удаление одинаковых слов в строке C++
C++ Cтроки, vector. Посчитать количество одинаковых слов в строке

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.09.2012, 06:08     Удаление одинаковых слов в строке #32
Цитата Сообщение от easybudda Посмотреть сообщение
Ну это - да, куда уж проще!
И в чём он сложнее, чем ваш?

Цитата Сообщение от easybudda Посмотреть сообщение
9 пост ещё раз посмотрите - там хороший пример.
Хороший, но для одной строки.
Yandex
Объявления
08.09.2012, 06:08     Удаление одинаковых слов в строке
Ответ Создать тему
Опции темы

Текущее время: 19:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru