Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 120, средняя оценка - 4.92
Rooney
0 / 0 / 0
Регистрация: 22.11.2009
Сообщений: 37
#1

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

16.01.2011, 20:03. Просмотров 18230. Ответов 7
Метки нет (Все метки)

Добрый вечер! Как можно подсчитать количество вхождений строки S2 в строку S1?

Допустим:

S1= dfsgsffgsrr
S2= gs
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2011, 20:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как подсчитать количество вхождений подстроки в строку (C++):

Подсчитать количество вхождений слова «мама» в строку и вывести номера первых позиций этих вхождений - C++
Помогите исправить ошибку. Как вывести номера первых позиций вхождений слова мама? Подсчитать количество вхождений слова «мама» в строку...

Определить количество вхождений подстроки в заданную строку - C++
Определить количество вхождений подстроки в заданную строку.. Добавлено через 3 часа 57 минут Вообщем сам допер. Если кому...

Найти количество и места вхождений подстроки в строку - C++
Всем привет, есть задача, где нужно найти количество и места вхождений подстроки в строку, но она немного не стандартна, то есть в...

Указатели: посчитать количество вхождений подстроки в строку - C++
Не могу дописать программу. Заранее извените, ещё не умею вставлять код программы... Выделить код и на панели, где вводите текст,...

Подсчитать количество вхождений в строку определенных символов - C++
Помогите написать программу... Данная строка символов S. Подсчитать : а ) сколько раз среди данных символов встречается символ + и...

Подсчитать количество вхождений каждого символа в строку - C++
например у Вас есть строка: asddsg В выходной файле, куда Вы запишите результаты работы программы будет: a – 1 s – 2 d – 2 g – 1

7
sandye51
программист С++
685 / 587 / 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); 
}
0
asics
Freelance
Эксперт С++
2850 / 1785 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
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;
}
1
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;
}
0
asics
Freelance
Эксперт С++
2850 / 1785 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
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;
}
0
Rooney
0 / 0 / 0
Регистрация: 22.11.2009
Сообщений: 37
16.01.2011, 20:50  [ТС] #6
Последний вариант не компилируется
0
asics
Freelance
Эксперт С++
2850 / 1785 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
16.01.2011, 21:16 #7
Rooney, Ну ниче не поделаеш, я ж незнаю какие ошибки выдает, у меня все хорошо скомпилировалось.
0
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;
}
0
17.01.2011, 18:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.01.2011, 18:40
Привет! Вот еще темы с ответами:

Подсчитать количество вхождений в строку заданной последовательности символов - C++
Дана строка символов. Подсчитать количество вхождений в строку заданной последовательности символов. Строка для обработки ввести с...

Подсчитать количество вхождений введенного с клавиатуры слова в строку - C++
собственно, сабж...помогите с задачкой, пожалуйста

Функции посчитывающие количество вхождений подстроки в строку, реализация через char* и через шаблон - C++
Необходимо реализовать две функции: 1) int SubStrCount(const char *str, const char *subStr); 2) template&lt;typename T&gt;...

Подсчет вхождений подстроки в строку - C++
Здравствуйте, помогите найти ошибку, в файле есть строки например S1gfgd S2vsdfvbf S1ffgv необходимо подсчитать сколько раз...


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

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

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