Форум программистов, компьютерный форум, киберфорум С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/34: Рейтинг темы: голосов - 34, средняя оценка - 4.65
302 / 160 / 62
Регистрация: 27.02.2010
Сообщений: 317

Удалить повторяющиеся слова в строке

17.04.2010, 11:55. Показов 6902. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Как удалить из строки типа char, введенной с помощью cin.getline(buf, 80), одинаковые слова (слова могут быть разделены одним или несколькоми пробелами и знаками табуляции)? В полученной строке слова должны быть разделены только одним пробелом. Можно записать неповторяющиеся слова в новую строку. Но я что-то не могу понять как это сдалать((. Помогите, кто знает

Добавлено через 20 часов 0 минут
Ответ:
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
 
const int SIZE =80;
 
char *pr2 (char *in);
char *pr1 (char *in);
char *copy(char *, char *, int);
int opr (char *a, char *b, int, int);
void ud(char*, char*);
 
void main()
{
    char buf[SIZE],buf2[SIZE], buf3[SIZE]={' '}, outbuf[SIZE]={' '};
 
    while(cout<<"Vvedite 1 stroky: ",
    cin.getline(buf, SIZE))
    {   
        ud(buf, buf3);
 
        cout<<"Rezultat: "<<buf3;
        cout<<endl<<endl;
    }
}
void ud (char *s, char *b)
{
    char *a;
    char *p=b, *z=b; 
    int u=0;
 
    a=pr1(s);
    s=pr2(a);
    b=copy(a,b,s-a);
    
    char *t=b;
 
    while (*(a=pr1(s)))
    {
        s=pr2(a);
        t=z;
        while (*(p=pr1(t)))
        {
            t=pr2(p);
            u=opr(a,p, s-a, t-p);
 
            if(u==0)
                continue;
            else
                break;
        }
        if (u==0)
            b=copy(a,b,s-a);    
    }
}
int opr (char *t, char *r, int len, int len2)
{
    int k=0;
    if (len!=len2)
        return 0;
    else
    {
         for (int j=0; j<len; j++)
         {
             if (*t++==*r++)
                k=1;
            else 
            {
                k=0;
                break;
            }
         }
    return k;
     }      
}
char *pr1(char *in)
{ 
    while (*in&&(*in==' ')||(*in=='\t'))
        in++;
    return in;
}
char *pr2 (char *in)
{
    while (*in&&*in!=' '&&*in!='\t')
        in++;
    return in;
}
char *copy(char * from, char *to, int len)
{
    for (int j=0; (j<len)&&(*to++=*from++); j++)
        ;
    
    *to++=' ';
    *to='\0';
 
    return to;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.04.2010, 11:55
Ответы с готовыми решениями:

Сравнить с последнее слово с другими словами в строке и удалить повторяющиеся слова
задание- сравнить с последнее слово с другими словами в строке и удалить повторяющиеся слова(последнее слово=слову в строке). вывести...

Создать очередь, содержащую слова. Удалить из очереди все повторяющиеся слова, оставив только их первые вхождения
#include &lt;iostream&gt; using namespace std; struct queue { int inf; queue *next; }; void push(queue *&amp;h, queue *&amp;t, int x) { ...

Удалить повторяющиеся слова
Добрый вечер, помогите пожалуйста. Даны две строки одинаковой длины, не превышающей 125 символов. Исключить повторяющиеся фрагменты. Я беру...

4
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12840 / 7581 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
17.04.2010, 15:26
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 <set>
#include <iterator>
 
int main(){
    std::string buf, tmp;
    std::set<std::string> set;
    std::cout << "String: ";
    std::getline(std::cin, buf);
    std::istringstream ist(buf);
    while ( ist >> tmp )
        set.insert(tmp);
    std::cout << "Unique words: ";
    std::copy(set.begin(), set.end(), std::ostream_iterator<std::string>(std::cout, " "));
    std::cout << std::endl;
    return 0;
}
1
 Аватар для yanyk1n
4342 / 1474 / 680
Регистрация: 12.03.2009
Сообщений: 5,310
17.04.2010, 16:00
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
#include <iostream>
#include <cstring>
using namespace std;
 
const int SIZE = 80;
 
int main()
{
    char buf[SIZE];
    cout << "-> ";
    cin.getline(buf, SIZE);
 
    char* words[SIZE];
    int count = 0;    
    char* p = strtok(buf," ");
    bool flag;
    while (p)
    {
        flag = true;
        for (int i = 0; i < count; i++) if (!strcmp(p, words[i]))
        {
            flag = false;
            break;
        }
        if (flag) words[count++] = p; 
        p = strtok(NULL," ");
    }    
    for (int i = 0; i < count ; i++) cout << words[i] << endl;
    return 0;
}
Добавлено через 29 секунд

Не по теме:

easybudda, всё же эта задача на char, а не на контейнеры:)

2
302 / 160 / 62
Регистрация: 27.02.2010
Сообщений: 317
17.04.2010, 17:33  [ТС]
Спасибо за помощь! Просто проблема была в том, что нужно было обойтись без стандартных библиотечных функций... развиваем логику мышления, так сказать . все равно еще раз всем спасбо)
0
17.04.2010, 18:24

Не по теме:

Цитата Сообщение от NNN777 Посмотреть сообщение
нужно было обойтись без стандартных библиотечных функций... развиваем логику мышления
Это больше похоже на "роем траншею столовой ложкой" ;)

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.04.2010, 18:24
Помогаю со студенческими работами здесь

Удалить повторяющиеся слова
ребятки помогите пожлста! не успела сделать вовремя (проболела после сессии долго). читать книжки пробовала, гуглила инет, но под мое...

Удалить повторяющиеся слова
char mas; char let; cout &lt;&lt; &quot;Введите строку: &quot;; gets(mas); cout &lt;&lt; endl; cout &lt;&lt; &quot;Введите подстроку:...

Удалить из строки повторяющиеся слова
Всем привет! Никак не могу разобраться с заданием из книги Бьерн Страуструпа: Задание: &quot;Читайте последовательность слов из...

Удалить из текста повторяющиеся слова.(Pascal -> C++)
Я написал программу на паскале, мне сказали ее перевести на Си ++ , но я этот язык знаю плохо. Сказали подумай как? Помогите, пожалуйста....

Удалить все повторяющиеся буквы из слова
Дано слово, удалить из него все повторяющиеся буквы, оставив их первые вхождения,то есть в слове должны остаться только разные буквы.


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
std::span в C++: Производительность и лучшие практики
NullReferenced 28.03.2025
std::span — одно из самых недооценённых нововведений стандарта C++20, которое радикально меняет подход к работе с непрерывными последовательностями данных. По сути, это невладеющее представление. . .
Многопоточность в C#: Threadpool
UnmanagedCoder 28.03.2025
Пул потоков в C# — это коллекция заранее созданных и готовых к использованию потоков, которые находятся в распоряжении приложения. Вместо того чтобы создавать и уничтожать потоки для каждой небольшой. . .
Вопросы на собеседованиях по микросервисам
ArchitectMsa 27.03.2025
Работодатели ищут не просто разработчиков, знающих базовые концепции, а специалистов, разбирающихся в тонкостях масштабирования, отказоустойчивости и производительности. Сейчас на первый план выходят. . .
Взаимодействие Python с REST API
py-thonny 27.03.2025
REST API - это архитектурный стиль взаимодействия компонентов распределённого приложения в сети. Python располагает функциональным набором инструментов для работы с REST API и основная библиотека для. . .
sshd restrictions, ssh access limitations
jigi33 26.03.2025
sshd restrictions | ssh access limitations рестрикции доступа на сервер sshd статья: https:/ / www. golinuxcloud. com/ restrict-allow-ssh-certain-users-groups-rhel
Компиляция C++ с Clang API
NullReferenced 24.03.2025
Компиляторы обычно воспринимаются как черные ящики, которые превращают исходный код в исполняемые файлы. Мы запускаем компилятор командой в терминале, и вуаля — получаем бинарник. Но что если нужно. . .
Многопоточность в C#: Класс Thread
UnmanagedCoder 24.03.2025
Когда запускается приложение на компьютере, операционная система создаёт для него процесс - виртуальное адресное пространство. В C# этот процесс изначально получает один поток выполнения — главный. . .
SwiftUI Data Flow: Передача данных между представлениями
mobDevWorks 23.03.2025
При первом знакомстве со SwiftUI кажется, что фреймворк предлагает избыточное количество механизмов для передачи данных: @State, @Binding, @StateObject, @ObservedObject, @EnvironmentObject и другие. . . .
Моки в Java: Сравниваем Mockito, EasyMock, JMockit
Javaican 23.03.2025
Как протестировать класс, который зависит от других сложных компонентов, таких как базы данных, веб-сервисы или другие классы, с которыми и так непросто работать в тестовом окружении? Для этого и. . .
Архитектурные паттерны микросервисов: ТОП-10 шаблонов
ArchitectMsa 22.03.2025
Популярность микросервисной архитектуры объясняется множеством важных преимуществ. К примеру, она позволяет командам разработчиков работать независимо друг от друга, используя различные технологии и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер