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

Как подсчитать количество вхождений подстроки в строку - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 120, средняя оценка - 4.92
Rooney
0 / 0 / 0
Регистрация: 22.11.2009
Сообщений: 37
16.01.2011, 20:03     Как подсчитать количество вхождений подстроки в строку #1
Добрый вечер! Как можно подсчитать количество вхождений строки S2 в строку S1?

Допустим:

S1= dfsgsffgsrr
S2= gs
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2011, 20:03     Как подсчитать количество вхождений подстроки в строку
Посмотрите здесь:

C++ Создать функцию, которая на вход получает строку символов, сообщает количество вхождений каждой цифры в строку...
C++ Подсчитать кол-во вхождений введенного с клавиатуры слова в строку
указатели (посчитать кол-во вхождений подстроки в строку) C++
C++ Определить количество вхождений подстроки в заданную строку
C++ Найти количество и места вхождений подстроки в строку
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
16.01.2011, 20:07     Как подсчитать количество вхождений подстроки в строку #2
Rooney,
C
1
2
3
4
5
6
7
int c = 0;
char* p = strstr(string, substring);
while (p)
{
c++;
p = strstr(string, substring); 
}
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
16.01.2011, 20:11     Как подсчитать количество вхождений подстроки в строку #3
Rooney,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
 
int main()
{
    std::string s1("dffffsgsffgsrr"), s2("ff");
    size_t cnt = 0;
 
    for(std::string::size_type i = 0; i < s1.length(); ++i)
        if(s1[i] == s2[0])
            if(s1.substr(i, s2.length()) == s2)
            {
                ++cnt;
                i += s2.length() - 1;
            }
 
    std::cout << cnt;
    return 0;
}
Rooney
0 / 0 / 0
Регистрация: 22.11.2009
Сообщений: 37
16.01.2011, 20:25  [ТС]     Как подсчитать количество вхождений подстроки в строку #4
Не могли бы помочь, через массив решить...
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
#include <iostream>
#include <windows.h>
#include <fstream>
#include <string>
 
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    const int S = 256;    
    char s1[S] = "";
    char s2[S] = "";
    cout << "Введите строку S1:";
    cin.getline(s1,S);
    cout << "Строка: [" << s1 << "] \n";
    cout << "Введите строку S2:";
    cin.getline(s2,S);
    cout << "Строка: [" << s2 << "] \n";
   
   
   
     system ("pause"); 
     return 0;
}
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
16.01.2011, 20:34     Как подсчитать количество вхождений подстроки в строку #5
Rooney,
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
#include <iostream>
#include <windows.h>
#include <fstream>
#include <cstring>
 
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    const int S = 256;
    int k, cnt = 0;
    char s1[S] = "";
    char s2[S] = "";
    cin.getline(s1,S);
    cin.getline(s2,S);
 
    for(int i = 0; i < strlen(s1); ++i)
    {
        char tmp[S] = "";
        k = 0;
        if(s1[i] == s2[0])
        {
            for(int j = i; j <= strlen(s2); ++i)
                tmp[k++] = s1[j];
 
            if(strcmp(s2, tmp))
                ++cnt;
                
            i += strlen(s2) - 1;
        }
    }
 
    cout << cnt;
     return 0;
}
Rooney
0 / 0 / 0
Регистрация: 22.11.2009
Сообщений: 37
16.01.2011, 20:50  [ТС]     Как подсчитать количество вхождений подстроки в строку #6
Последний вариант не компилируется
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
16.01.2011, 21:16     Как подсчитать количество вхождений подстроки в строку #7
Rooney, Ну ниче не поделаеш, я ж незнаю какие ошибки выдает, у меня все хорошо скомпилировалось.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.01.2011, 18:40     Как подсчитать количество вхождений подстроки в строку
Еще ссылки по теме:

Подсчитать количество вхождений каждого символа в строку C++
C++ Функции посчитывающие количество вхождений подстроки в строку, реализация через char* и через шаблон
Подсчитать количество вхождений буквы (кириллица) в строку (кириллица) C++

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

Или воспользуйтесь поиском по форуму:
Rooney
0 / 0 / 0
Регистрация: 22.11.2009
Сообщений: 37
17.01.2011, 18:40  [ТС]     Как подсчитать количество вхождений подстроки в строку #8
Попытался переделать...

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
#include <iostream>
#include <windows.h>
#include <fstream>
 
using namespace std;
 
int main()
{
        SetConsoleCP(1251);
        SetConsoleOutputCP(1251);
        const int S = 256; 
        char a[S] = "";
        char b[S] = "";
        int k = 0,cnt = 0;
        cout << "Ââåäèòå ñòðîêó 1:"<< endl;
        cin.getline(a,S);
        cout << "ÑòðîêГ*: [" << a << "] \n";
        cout << "Ââåäèòå ñòðîêó 2:"<< endl;
        cin.getline(b,S);
        int const la = strlen(a);
        int const lb = strlen(b);
        cout << "ÑòðîêГ*: [" << b << "] \n";
        for(int i =0 ; i < la; i++){
                char tmp[S] = "";
                k=0;
                if(a[i] == b[0]){
                    for(int j=i; j<=lb ;j++){
                        tmp[k] = a[j];
                        k++;
                    }
                    if(strcmp(b,tmp))cnt++;
                }
        }    
        cout << "Êîëè÷åñòâî âõîæäåГ*ГЁГ©: " << cnt << endl;
        system ("pause"); 
        return 0;
}
Проблема в том что,
прога не отличает строку "привет" от "привед"... засчитывает как вхождение...

Добавлено через 5 часов 15 минут
Нашёл решение самостоятельно:

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
#include <iostream>
#include <windows.h>
#include <fstream>
#include <cstring>
using namespace std;
 
int main()
{
        SetConsoleCP(1251);
        SetConsoleOutputCP(1251);
        const int S = 256; 
        char a[S] = "";
        char b[S] = "";
        int k = 0,cnt = 0;
        cout << "Введите строку 1:"<< endl;
        cin.getline(a,S);
        cout << "Строка: [" << a << "] \n";
        cout << "Введите строку 2:"<< endl;
        cin.getline(b,S);
        int const la = strlen(a);
        int const lb = strlen(b);
        cout << "Строка: [" << b << "] \n";
        for(int i =0 ; i < la; i++){
                char tmp[S] = "";
                k=0;
                if(a[i] == b[0]){
                    int j = i;
                    while(a[j] == b[k]){
                        tmp[k] = a[j];
                        j++; k++;
                    }
                    if(!(strcmp(b,tmp)))cnt++;
                }
        }    
        cout << "Количество вхождений: " << cnt << endl;
        system ("pause"); 
        return 0;
}
Yandex
Объявления
17.01.2011, 18:40     Как подсчитать количество вхождений подстроки в строку
Ответ Создать тему
Опции темы

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