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

Найти повторения в строках - C++

Восстановить пароль Регистрация
 
Vlad_
5 / 5 / 0
Регистрация: 07.09.2012
Сообщений: 170
06.11.2012, 23:26     Найти повторения в строках #1
Дана строка ,вывести повторяющиеся слово и количество раз сколько оно встречается.
исходного кода нету так как идей как реализировать нет.
Пример den horoshii segodnya a zavtra plohoi den
Вывод
слово den
Кол-во 2

Добавлено через 1 час 41 минуту
я что-то не понятно описал может?или просто не кто не знает?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2012, 23:26     Найти повторения в строках
Посмотрите здесь:

Дан целый массив максимальной размерности 20*20. Провести сортировку по возрастанию в нечетных строках массива и по убыванию в четных строках. C++
найти слово минимальной длины, которое есть в обеих строках C++
C++ В двух строках найти подстроки и наибольшую подстроку
C++ В строках матрицы с отрицательным элементом на главной диагонали найти наибольший из всех элементов (найти ошибку в коде)
Найти повторения слов в строке C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Andrey.K
 Аватар для Andrey.K
338 / 259 / 15
Регистрация: 14.11.2010
Сообщений: 480
06.11.2012, 23:47     Найти повторения в строках #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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void split(vector<string>& dest, const string& str, const char* delim)
{
    char* pTempStr = strdup( str.c_str() );      
    char* pWord = strtok(pTempStr, delim);       
    while(pWord != NULL)
    {
        dest.push_back(pWord);
        pWord = strtok(NULL, delim);        
    }
    
    free(pTempStr); 
}
int main()
{
    string str="privet kak tvoie ololo dela qwert? ololo slonik poplp ololo";
    char* delim=" ";
    vector<string> v;
    split(v,str,delim);
    int count=0;
    string current;
    bool leave=false;
    for(int i=0;i<v.size();i++)
    {
        current=v[i];
        for(int j=i+1;j<v.size();j++)
        {
            if(current==v[j])
            {
                leave=true;
                break;
            }
        }
        if(leave) break;
    }
    for(int k=0;k<v.size();k++)
    {
        if(current==v[k]) count++;
    }
    cout<<"Word: "<<current<<endl;
    cout<<"Count: "<<count<<endl;
    system("pause");
    return 0;
}
Vlad_
5 / 5 / 0
Регистрация: 07.09.2012
Сообщений: 170
07.11.2012, 01:07  [ТС]     Найти повторения в строках #3
Andrey.K, спасибо конечно но это слишком заумный код для меня))
особенно использование vector мне вообще не ясно
D_bl_M
 Аватар для D_bl_M
25 / 25 / 1
Регистрация: 25.03.2012
Сообщений: 129
07.11.2012, 12:16     Найти повторения в строках #4
Вы бы хоть написали что прочли/изучили, от чего отталкиваться?!...
Vlad_
5 / 5 / 0
Регистрация: 07.09.2012
Сообщений: 170
07.11.2012, 12:40  [ТС]     Найти повторения в строках #5
работал и изучал только циклы,массивы,матрици ,динамическую память и работу со строками ,создание функци
D_bl_M
 Аватар для D_bl_M
25 / 25 / 1
Регистрация: 25.03.2012
Сообщений: 129
07.11.2012, 14:51     Найти повторения в строках #6
vector это практически тоже что и массив (образно)
я Вас подтолкну, Вам же наверное интересно самому решить задачу, вот приведу пример, он не сложный, но его немного нужно отредактировать и дописать, спрашивайте походу, Вам обязательно подскажут...
и прочтите про вектор, там все предельно понятно, тем более что Вы массивы изучили.
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 <vector>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
    
    vector <string> words; 
    string temp;
    while (cin >> temp)             // считываем слова, отделенные разделителями 
            words.push_back(temp);  // заносим в вектор 
        cout << "Количество слов: " << words.size() << endl; 
 
        for (int i = 0; i< words.size(); ++i)
            if (i==0 || words[i-1]!=words[i]) // это новое слово? 
                cout << words[i] << "\n";
}
Добавлено через 22 минуты
Вот на этом же форуме уже обсуждалось подобное, может тут что-то станет полезным для Вас
Ptomaine
 Аватар для Ptomaine
13 / 13 / 0
Регистрация: 22.10.2011
Сообщений: 35
08.11.2012, 13:33     Найти повторения в строках #7
Вот ещё вариант:

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
#include <iostream>
#include <string>
#include <map>
 
int main()
{
    std::string str("    den horoshii     segodnya, a    zavtra  plohoi den   ");
 
    std::string::iterator it(str.begin()), end(str.end()), prev(it);
    std::map<std::string, long> words;
 
    while(it != end && (*it < '0' || (*it > '9' && *it < 'A'))) { ++it; ++prev; }
 
    for (; it != end; ++it)
        if (*it < '0' || (*it > '9' && *it < 'A'))
        {
            ++words[std::string(prev, it)]; prev = it;
 
            while(it != end && (*it < '0' || (*it > '9' && *it < 'A'))) { ++it; ++prev; }
 
            if (it == end) break;
        }
 
    if (prev != it) ++words[std::string(prev, it)];
 
    for (std::map<std::string, long>::iterator wit(words.begin()), wend(words.end()); wit != wend; ++wit)
        if ((*wit).second > 1)
            std::cout << "word: '" << (*wit).first << "'; count: " << (*wit).second << std::endl;
 
    return 0;
}
cosmo77
0 / 0 / 0
Регистрация: 08.11.2012
Сообщений: 7
08.11.2012, 13:36     Найти повторения в строках #8
разбить строку на слова по пробелу . в stl ведь есть функции сравнения строк ?. или в string
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2012, 13:43     Найти повторения в строках
Еще ссылки по теме:

C++ Найти сумму элементов в парных строках матрицы
Найти минимальные элементы в строках квадратной матрицы C++
Найти сумму элементов матрицы в определенных строках C++

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

Или воспользуйтесь поиском по форуму:
Ptomaine
 Аватар для Ptomaine
13 / 13 / 0
Регистрация: 22.10.2011
Сообщений: 35
08.11.2012, 13:43     Найти повторения в строках #9
Ну, или так:

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
#include <iostream>
#include <string>
#include <map>
 
int main()
{
    std::string str("    den horoshii     segodnya, a    zavtra  plohoi den   ");
 
    std::string::iterator it(str.begin()), end(str.end()), prev(it);
    std::map<std::string, long> words;
 
    while(it != end && !std::isalnum(*it)) { ++it; ++prev; }
 
    for (; it != end; ++it)
        if (!std::isalnum(*it))
        {
            ++words[std::string(prev, it)]; prev = it;
 
            while(it != end && !std::isalnum(*it)) { ++it; ++prev; }
 
            if (it == end) break;
        }
 
    if (prev != it) ++words[std::string(prev, it)];
 
    for (std::map<std::string, long>::iterator wit(words.begin()), wend(words.end()); wit != wend; ++wit)
        if ((*wit).second > 1)
            std::cout << "word: '" << (*wit).first << "'; count: " << (*wit).second << std::endl;
 
    return 0;
}
Yandex
Объявления
08.11.2012, 13:43     Найти повторения в строках
Ответ Создать тему
Опции темы

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