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

Удалить из текста все слова, которые входят в него один раз - C++

Восстановить пароль Регистрация
 
Torvalds Linus
0 / 0 / 0
Регистрация: 20.10.2014
Сообщений: 13
23.11.2014, 12:42     Удалить из текста все слова, которые входят в него один раз #1
Здравствуйте. Необходимо изъять из заданного текста, все слова которые входят в него один раз.
Как разделить текст на слова, я примерно понимаю, но вот что с этими словами делать не знаю.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.11.2014, 12:42     Удалить из текста все слова, которые входят в него один раз
Посмотрите здесь:

Строки в С++ - вывести слова, которые встречаются один раз C++
C++ Сформировать список L включив в него по одному разу элементы, которые входят в один из списков L1 и L2, но в то же время не входит во второй из них
C++ Сформировать список l, включив в него по одному разу элементы, которые входят. В один из списков l1 или l2. Но не входят в другой
C++ Отредактировать текст,удаляя из него слова,которые встречаются в предложении заданное число раз
C++ Удалить из текста все слова, которые расположены после запятой
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Torvalds Linus
0 / 0 / 0
Регистрация: 20.10.2014
Сообщений: 13
24.11.2014, 20:13  [ТС]     Удалить из текста все слова, которые входят в него один раз #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
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    string text;
 
    cout << " ";
    getline(cin, text);
 
    int n=0, j, k=0;
    for(int i=0; i<text.length(); i++)
    {
        if(text[i]==' ' || text[i]=='.' || text[i]==',' || text[i]=='!')
        {
            //хз
        }
    }
 
    getch();
    return 0;
}
hoggy
5230 / 2121 / 404
Регистрация: 15.11.2014
Сообщений: 4,812
Завершенные тесты: 1
24.11.2014, 22:29     Удалить из текста все слова, которые входят в него один раз #3
http://rextester.com/CLAKY61330

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
#include <algorithm>
#include <iostream>
#include <vector>
#include <string>
#include <set>
 
using namespace std;
 
//---------------------------------------------------------------
// взято отсюда: <4>
// [url]http://stackoverflow.com/questions/236129/split-a-string-in-c[/url]
//---------------------------------------------------------------
template <class ContainerT>
void Tokenize(const std::string& str, 
    ContainerT& tokens,
    const std::string& delimiters = " ",
    bool trimEmpty = false)
{
   std::string::size_type pos, lastPos = 0;
 
   using value_type = typename ContainerT::value_type;
   using size_type  = typename ContainerT::size_type;
 
   while(true)
   {
      pos = str.find_first_of(delimiters, lastPos);
      if(pos == std::string::npos)
      {
         pos = str.length();
 
         if(pos != lastPos || !trimEmpty)
            tokens.push_back(value_type(str.data()+lastPos,
                  (size_type)pos-lastPos ));
         break;
      }
      else
      {
         if(pos != lastPos || !trimEmpty)
            tokens.push_back(value_type(str.data()+lastPos,
                  (size_type)pos-lastPos ));
      }
 
      lastPos = pos + 1;
   }
}
//---------------------------------------------------------------
//---------------------------------------------------------------
 
void Cut(string& text, const string& word)
{
    const auto it = search( text.begin(), text.end(), word.begin(), word.end() );
    text.erase(it, it + word.size());
}
 
int main()
{
    std::cout << "Hello, world!\n";
    
    string punctuation = ",;.!: ";
    string text = "111! 222, 333, 111; 222";
 
    cout<<"before: '"<< text<<"'\n";
    
    vector<string> words;
    Tokenize(text, words, punctuation, true);
    
    multiset<string> myset;
    for(const auto& w: words)
        myset.insert(w);
    
    string last;    
    for(const auto& word: myset)
        if(word==last || (last = word, myset.count(word)!=1) )
            continue;
        else
            Cut(text, word);
    
    cout <<"after : '"<< text << "'\n";
}
Torvalds Linus
0 / 0 / 0
Регистрация: 20.10.2014
Сообщений: 13
30.11.2014, 21:18  [ТС]     Удалить из текста все слова, которые входят в него один раз #4
Вот что получилось. Есть проблема, если ввожу 5-6 слов программа крашится. В чём проблема? Как исправить?
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
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    string text, slovo1, slovo2;
 
    cout << " ";
    getline(cin, text);
 
 
    int n=0, m=0, k1=0, k2=0, i, j, i1, j1, s, temp=0;
    for(i=0; i<text.length(); i++)
    {
        if(text[i]==' ' || text[i]=='.' || text[i]==',' || text[i]=='!')
        {
            if(i!=n)
            {
                char s1[i-n];
                for(j=n; j<i; j++)
                {
                    s1[k1]=text[j];
                    k1++;
                }
 
                for(j=0; j<i-n; j++)
                {
                    slovo1+=s1[j];
                }
 
                for(i1=0; i1<text.length(); i1++)
                {
                    if(text[i1]==' ' || text[i1]=='.' || text[i1]==',' || text[i1]=='!')
                    {
                        if(i1!=m)
                        {
                            char s2[i1-m];
                            for(j1=m; j1<i1; j1++)
                            {
                                s2[k2]=text[j1];
                                k2++;
                            }
                            for(j1=0; j1<i1-m; j1++)
                            {
                                slovo2+=s2[j1];
                            }
 
                            if(slovo1==slovo2)
                            {
                                temp++;
                            }
 
                            strcpy(s2, "");
                            slovo2.clear();
 
                            m=i1+1;
                            k2=0;
                        }
                    }
                }
 
            /*if(temp>1)
                cout << " " << slovo1;*/
 
                n=i+1;
                k1=0;
                temp=0;
                strcpy(s1, "");
                slovo1.clear();
            }
        }
    }
 
    cout << text;
 
    getch();
    return 0;
}
Yandex
Объявления
30.11.2014, 21:18     Удалить из текста все слова, которые входят в него один раз
Ответ Создать тему
Опции темы

Текущее время: 19:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru