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

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

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

Здравствуйте!
Как удалить из строки типа 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.04.2010, 11:55
Ответы с готовыми решениями:

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

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

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

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

4
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10875 / 6763 / 1619
Регистрация: 25.07.2009
Сообщений: 12,483
17.04.2010, 15:26 2
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
4337 / 1469 / 680
Регистрация: 12.03.2009
Сообщений: 5,310
17.04.2010, 16:00 3
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  [ТС] 4
Спасибо за помощь! Просто проблема была в том, что нужно было обойтись без стандартных библиотечных функций... развиваем логику мышления, так сказать . все равно еще раз всем спасбо)
0
easybudda
17.04.2010, 18:24     Удалить повторяющиеся слова в строке
  #5

Не по теме:

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

0
17.04.2010, 18:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.04.2010, 18:24
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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