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

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

Войти
Регистрация
Восстановить пароль
 
Darth_Sanchez
4 / 4 / 1
Регистрация: 28.04.2013
Сообщений: 64
#1

Строки. Распечатать предложение, удалив из него те слова , которые встретились там более одного раза - C++

28.04.2013, 11:57. Просмотров 824. Ответов 1
Метки нет (Все метки)

Ввести предложение , слова в котором разделены пробелами и запятыми . Распечатать это предложение , удалив из него те слова , которые встретились там более одного раза .
вот такая задача, сделать вообще не получается, подскажите пожалуйста как лучше сделать
вот последнее что пробовал сделать по ней:


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
59
60
61
62
63
64
65
66
#include <conio.h> 
#include <iostream> 
#include <string> 
#include <string.h> 
#include <math.h>
#include <time.h>
#include <stdlib.h>
using namespace std;
 
 
void main(){
string str;
int UpBorder=0, DownBorder=0, buf, check=0, j=0;
cout << "Type string: ";
getline(cin, str);
cout << endl;
cout << str.length() << endl;
for(int i=0; i < (str.length());i++)
{
if((str[i] == 32) && (str[i+1] > 65))  //если встретился пробел, а след. символ - буква
{
DownBorder = i+1; //нижней границе присваеваем первую букву в слове
buf = DownBorder;
check = 1;
while (check == 1) //ищем верхнюю границу слова (до запятой или пробела или конца строки)
    {
    if((str[buf] == 32) || (str[buf] == 44) || (buf == str.length()))  //если встретится запятая, пробел или конец строки, то поменять чек на ноль
    check = 0;
    else
    buf++;
    }   
UpBorder = buf-1; //верхняя граница
check = 0;
for(int k=0; k<i; k++)  //поиск первой совпадающей буквы
    {
    if((str[DownBorder] == str[k])) //если встретится совпадающая буква ((а предыдущей будет или начало строки или пробел))
        {
        buf = k;
        while (str[buf] > 65) //
            {
            if (str[buf] != str[DownBorder+j]) 
                check = 1;
            j++;
            buf++;
            }
        }
    }
 
j=0;
if(check == 0)
    {
for(int k=DownBorder; k<=UpBorder; k++)
cout << str[k];
cout << "  ";
    }
 
 
}
 
 
 
 
}
 
 
getch();}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2013, 11:57     Строки. Распечатать предложение, удалив из него те слова , которые встретились там более одного раза
Посмотрите здесь:
Удалить из предложения слова, которые встретились в нем более одного раза C++
C++ Распечатать введенное предложение, удалив из него слова, которые состоят менее, чем из трех букв
C++ Распечатать введенное предложение, удалив из него слова, которые состоят менее чем из трех букв
Распечатать введенное предложение, удалив из него слова, которые состоят менее чем из трех букв C++
Дано предложение, надо вывести слова встречающие более одного раза C++
Исключить из файла все слова, которые встречаются более одного раза C++
Вывести все элементы массива входящие в него более одного раза C++
C++ Удалить из файла все слова, встречающиеся более одного раза
Найти и напечатать числа, которые встречаются в массиве более одного раза C++
Найти все элементы массива, которые встречаются в нем не более одного раза C++
Все элементы вектора, которые встречаются более одного раза, переписать в другой вектор C++
Выделить в другой массив все числа, которые встречаются более одного раза в исходном C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DiffEreD
1429 / 766 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
28.04.2013, 14:35     Строки. Распечатать предложение, удалив из него те слова , которые встретились там более одного раза #2
Сделал на основе unordered_set дабы сохранять правильный порядок слов в предложении. Как то так:
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 <iterator>
#include <vector>
#include <unordered_set>
 
int main()
{
    std::string s;
    std::cout<<"Enter text: "; std::getline(std::cin, s); 
    std::istringstream iss(s);
    std::vector<std::string> v{std::istream_iterator<std::string>(iss), std::istream_iterator<std::string>()};
    std::unordered_set<std::string> words{v.rbegin(), v.rend()};
    for (const auto& i : words) std::cout<<i<<" ";
    std::cout<<"\n";
    
    return 0;
}
Попутно вопрос, как вывести элементы unordered_set в обратном порядке?
Yandex
Объявления
28.04.2013, 14:35     Строки. Распечатать предложение, удалив из него те слова , которые встретились там более одного раза
Ответ Создать тему
Опции темы

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