Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

28.04.2013, 11:57. Просмотров 969. Ответов 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();}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2013, 11:57
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Строки. Распечатать предложение, удалив из него те слова , которые встретились там более одного раза (C++):

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

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

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

Распечатать введенное предложение, удалив из него слова, которые состоят менее чем из трех букв - C++
#include&lt;conio.h&gt; #include &lt;vcl.h&gt; #pragma hdrstop #pragma argsused void main () {char str; int i; cout&lt;&lt;&quot;Vvedi stroky;...

Дано предложение, надо вывести слова встречающие более одного раза - C++
Помогите пожалуйста! Дано предложение, надо вывести слова встречающие более одного раза. Программа должна на С++ Заранее спасибо!

Исключить из файла все слова, которые встречаются более одного раза - C++
Найти в файле f все слова которые встречаются более одного раза исключить их с файла f и получить файл новый q.Плиз

1
DiffEreD
1439 / 776 / 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 в обратном порядке?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.04.2013, 14:35
Привет! Вот еще темы с ответами:

Вывести все элементы массива входящие в него более одного раза - C++
нужно вывести из заданного пользователем массива все элементы, встречающиеся в нём более одного раза. я вроде бы решил задачу, но...

Удалить из файла все слова, встречающиеся более одного раза - C++
Найти в файле f все слова которые встречаются более одного раза выбросить их из файла f и получить новый файл q. Помогите пожалуйста.!!!

Найти и напечатать числа, которые встречаются в массиве более одного раза - C++
Одномерный массив А состоит из 30 элементов. Найти и напечатать числа, которые встречаются в массиве более одного раза.

Найти все элементы массива, которые встречаются в нем не более одного раза - C++
Нужна помощь. Задание такого : в двумерном массиве А найти все элементы, которые встречаются в нем не более одного раза и записать эти...


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

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

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