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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 5.00
Serraya
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 20
#1

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

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

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

Удаление одинаковых слов в строке - C++
#include "stdafx.h" #include "iostream" #include "conio.h" using namespace std; int _tmain(int argc, _TCHAR* argv) { const...

Удаление одинаковых слов в строке - C++
Здравствуйте, задача заключается в удалении одинаковых слов в строке. Пытался решить, но не доходит где у меня ошибка. Прошу помочь,...

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

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

Найти количество одинаковых слов в строке - C++
#include <iostream> using namespace std; int main() { char str1 = "to be or not to be"; char* leks = strtok(str1, " "); ...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
DiffEreD
1430 / 767 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
07.09.2012, 00:21 #2
Такой вариант устроит?:
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
#include<iostream>
#include <vector>
#include <string>
#include <sstream>
using namespace std;
 
int main()
{
    string input = "String String objects objects are a special special type of container,"
        "specifically designed to operate with with sequences of characters characters characters objects";
    string temp, output;
    vector<string> vec;
    stringstream ss;
    ss<<input;
    while (ss>>temp)
        vec.push_back(temp);
    int i = 0;
    for (; i<vec.size() - 1; i++)
    {
        if (vec[i] != vec[i+1])
            output += vec[i] + " ";
    }
    output += vec[i];
    cout<<"INPUT:  "<<input<<endl;
    cout<<"\n============================\n\n";
    cout<<"OUTPUT:  "<<output<<endl<<endl;;
    system("pause");
    return 0;
}
Serraya
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 20
07.09.2012, 00:53  [ТС] #3
вполне, спасибо вам
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
07.09.2012, 04:55 #4
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 <list>
#include <string>
#include <sstream>
using namespace std;
 
int main()
{
string input = "String String objects objects are a special special" 
               "type of container, specifically designed to operate with"
               " with sequences of characters characters characters objects";
    
string temp; // для слова из строки 
list <string> lst; // список слов из строки 
stringstream ss; // поток для строк
 
ss << input; // помещаем строку в поток
    
while (ss >> temp) // извлекаем строку по слову из потока
   lst.push_back(temp); // помещаем слова в список
 
lst.unique(); // удаляем дубликаты из списка
    
for (auto i = lst.begin(); i != lst.end(); i++) // выводим слова из списка
     cout << *i << ' ';
          
cout << endl;
    
system("pause");
return 0;
}
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
07.09.2012, 16:42 #5
Цитата Сообщение от alsav22 Посмотреть сообщение
удаляем дубликаты из списка
может проще тогда использовать set???
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
07.09.2012, 16:56 #6
Цитата Сообщение от panicwassano Посмотреть сообщение
может проще тогда использовать set???
В чём проще? Нужно удалить не все одинаковые слова, а только подряд идущие одинаковые. Код предложите с set.
easybudda
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,608
07.09.2012, 17:18 #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Как всё сложно
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
#include <iostream>
#include <string>
#include <sstream>
 
int main() {
    std::string str;
    
    while ( std::cout << "String: " && std::getline(std::cin, str) && ! str.empty() ) {
        std::cout << "Result: ";
        std::istringstream ist(str);
        std::string prev = "";
        
        while ( ist >> str ) {
            if ( str != prev ) {
                std::cout << str << ' ';
                prev = str;
            }
        }
        
        std::cout << std::endl;
    }
    
    return 0;
}
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
07.09.2012, 18:39 #8
Проще, согласен. Но если обработанную строку нужно будет сохранить? Тогда отличие будет в этом. У вас :
C++
1
2
3
4
5
6
 while ( ist >> str ) {
            if ( str != prev ) {
                std::cout << str << ' ';
                prev = str;
            }
        }
У меня:
C++
1
lst.unique();
Добавлено через 1 минуту
Может даже unique() так(или наподобие) и работает?
C++
1
2
3
4
5
6
while ( ist >> str ) {
            if ( str != prev ) {
                std::cout << str << ' ';
                prev = str;
            }
        }
Петррр
5949 / 3386 / 337
Регистрация: 28.10.2010
Сообщений: 5,926
07.09.2012, 19:00 #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
#include <vector>
#include <iterator>
 
int main()
{
    std::string str = "string string object object";
    std::istringstream stream(str);
    std::vector<std::string> vec;
    std::unique_copy((std::istream_iterator<std::string>(stream)),
        (std::istream_iterator<std::string>()), std::back_inserter(vec));
    std::ostringstream oStream;
    std::copy(vec.begin(), vec.end(), std::ostream_iterator<std::string>(oStream, " "));
    std::string result = oStream.str();
    std::cout << result << std::endl;
}
easybudda
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,608
07.09.2012, 21:26 #10
Цитата Сообщение от alsav22 Посмотреть сообщение
Но если обработанную строку нужно будет сохранить?
Да не вопрос! std::ostringstream
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
07.09.2012, 21:39 #11
Цитата Сообщение от easybudda Посмотреть сообщение
Да не вопрос! std::ostringstream
Вопрос не в том как. Если будет сохранение, то ваш код будет не проще моего, а может и сложнее. Согласны?
easybudda
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,608
08.09.2012, 00:39 #12
Цитата Сообщение от 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
#include <iostream>
#include <string>
#include <sstream>
 
int main() {
    std::string str;
    
    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;
            }
        }
        
        std::cout << "Result: " << ost.str() << std::endl;
    }
    
    return 0;
}
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.09.2012, 00:53 #13
Цитата Сообщение от easybudda Посмотреть сообщение
Если будет сохранение
И где оно в вашем коде? Опять просто вывод на консоль.
ForEveR
В астрале
Эксперт С++
7971 / 4733 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
08.09.2012, 01:01 #14
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <boost/range/adaptors.hpp>
#include <boost/range/algorithm.hpp>
#include <boost/algorithm/string.hpp>
#include <vector>
 
int main()
{
   std::string s = "hello and and what hello hello you doing doing";
   std::vector<std::string> v;
   boost::split(v, s, isspace, boost::token_compress_on);
   boost::copy((v | boost::adaptors::uniqued), std::ostream_iterator<std::string>(std::cout));
}
http://liveworkspace.org/code/472f05...0e44c6ee62f501
outoftime
║XLR8║
509 / 431 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
08.09.2012, 01:03 #15
За баги скоро вешать начнут.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.09.2012, 01:03
Привет! Вот еще темы с ответами:

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

Задача о строке. Удаление дубликатов слов - C++
В строке символов определить количество повторений каждого слова и удалить дубликаты слов.Слова отделяются пробелами. помогите...

Строки. Поиск одинаковых слов в предложениях. Вывод вместо одинаковых слов "*" - C++
Ввести два предложения, если в них есть одинаковые слова то во втором предложении заменить эти слова на &quot;*&quot;, причем количество &quot;*&quot; должно...

Посчитать сколько слов в строке начинается с буквы "т" 2. Ввести фразу. Все последовательности одинаковых символов заменить на выражение N(C) - C++
Очень нужно написать программы на C 1. Посчитать сколько слов в строке начинается с буквы &quot;т&quot; 2. Ввести фразу. Все последовательности...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
08.09.2012, 01:03
Ответ Создать тему
Опции темы

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