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

Мне надо сделать поиск последнего вхождения подстроки s1 в строку s(с функцией LastPos, не strstr). В этом коде просто вхождение подстроки в строку. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.79
fcrCullen93
1 / 1 / 0
Регистрация: 25.01.2011
Сообщений: 12
25.01.2011, 16:04     Мне надо сделать поиск последнего вхождения подстроки s1 в строку s(с функцией LastPos, не strstr). В этом коде просто вхождение подстроки в строку. #1
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
 
int count_of_substrings(string s, string s1){
        int start = 0;
        int count = 0;
        int pos = 0;
    for(i < 0; i < 4; i++){
        pos = s.find(s1.c_s(),start);
            if (pos != -1){
            start = pos + s1.size();
            count++;
            } else {
        break;
            }
    }
return count;
}
Помогите изменить код что бы он находил последнее вхождение подстроки в строку. Заранее спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2011, 16:04     Мне надо сделать поиск последнего вхождения подстроки s1 в строку s(с функцией LastPos, не strstr). В этом коде просто вхождение подстроки в строку.
Посмотрите здесь:

Машина Тьюринга, определение вхождения подстроки в строку C++
найти последнее вхождение подстроки в строку C++
C++ Вхождение подстроки в строку
C++ Как можно найти вхождение подстроки в строку без строковых функций?
C++ вхождение подстроки в строку
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
25.01.2011, 16:34     Мне надо сделать поиск последнего вхождения подстроки s1 в строку s(с функцией LastPos, не strstr). В этом коде просто вхождение подстроки в строку. #2
Цитата Сообщение от fcrCullen93 Посмотреть сообщение
код
А Вы этот "код" компилировать пытались? И чем Вам собственно strstr() так не угодила?
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
#include <stdio.h>
#include <string.h>
 
char * strrstr(const char * s1, const char * s2){
    const char * p = s1 + strlen(s1) - strlen(s2) + 1;
    
    while ( p > s1 )
        if ( strstr(--p, s2) )
            return (char*)p;
            
    return NULL;
}
 
int main(void){
    char s1[BUFSIZ], s2[BUFSIZ], * p;
    
    printf("String: ");
    scanf("%[^\n]%*c", s1);
    printf("Substring: ");
    scanf("%[^\n]%*c", s2);
    
    printf("Last substring: %s\n", ( p = strrstr(s1, s2) ) ? p : "not found!");
    
    return 0;
}
fcrCullen93
1 / 1 / 0
Регистрация: 25.01.2011
Сообщений: 12
25.01.2011, 17:13  [ТС]     Мне надо сделать поиск последнего вхождения подстроки s1 в строку s(с функцией LastPos, не strstr). В этом коде просто вхождение подстроки в строку. #3
Извините но мне нельзя использовать библиотечную функцию, можете помочь сделать аналогичную функцию без strstr?
panicwassano
590 / 558 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
25.01.2011, 17:34     Мне надо сделать поиск последнего вхождения подстроки s1 в строку s(с функцией LastPos, не strstr). В этом коде просто вхождение подстроки в строку. #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
char * GetSubStr(char *sub, char *str)
{
    char *pstr, *psubstr, *start;
    for (int i = 0; str[i]; ++i)
    {
 
        pstr = start = str + i;
        psubstr = sub;
 
        while(*psubstr && *psubstr == *pstr)
        {
            ++pstr;
            ++psubstr;
        }
 
        if (!*psubstr)
        {
            return start;
        }
    }
 
    return NULL;
}
fcrCullen93
1 / 1 / 0
Регистрация: 25.01.2011
Сообщений: 12
25.01.2011, 18:49  [ТС]     Мне надо сделать поиск последнего вхождения подстроки s1 в строку s(с функцией LastPos, не strstr). В этом коде просто вхождение подстроки в строку. #5
Еще один маленький вопрос, я тут поставила твой метод но тут у меня не совпадают с методом main. можете помочь?

Добавлено через 33 минуты
Цитата Сообщение от panicwassano Посмотреть сообщение
char * GetSubStr(char *sub, char *str)
{
char *pstr, *psubstr, *start;
for (int i = 0; str[i]; ++i)
{
pstr = start = str + i;
psubstr = sub;
while(*psubstr && *psubstr == *pstr)
{
++pstr;
++psubstr;
}
if (!*psubstr)
{
return start;
}
}
return NULL;
}
Можете на это main написать, я тот первый изменила но че то не выходит. Помогите пожалуйста!
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
25.01.2011, 23:25     Мне надо сделать поиск последнего вхождения подстроки s1 в строку s(с функцией LastPos, не strstr). В этом коде просто вхождение подстроки в строку. #6
Цитата Сообщение от fcrCullen93 Посмотреть сообщение
Извините но мне нельзя использовать библиотечную функцию
Беда...
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
#include <stdio.h>
 
int mystrlen(const char * s){
    const char * p;
    for ( p = s; *p; ++p )
        ;
    return p - s;
}
 
char * mystrstr(const char * s1, const char * s2){
    const char * p1, * p2;
    
    while ( *s1 ){
        for ( p1 = s1, p2 = s2; *p2 && *p1 == *p2; ++p1, ++p2 )
            ;
        if ( ! *p2 )
            return (char*)s1;
        ++s1;
    }
    
    return NULL;
}
 
char * mystrrstr(const char * s1, const char * s2){
        const char * p = s1 + mystrlen(s1) - mystrlen(s2) + 1;
        
        while ( p > s1 )
                if ( mystrstr(--p, s2) )
                        return (char*)p;
                        
        return NULL;
}
 
int main(void){
        char s1[BUFSIZ], s2[BUFSIZ], * p;
        
        printf("String: ");
        scanf("%[^\n]%*c", s1);
        printf("Substring: ");
        scanf("%[^\n]%*c", s2);
        
        printf("Last substring: %s\n", ( p = mystrrstr(s1, s2) ) ? p : "not found!");
        
        return 0;
}
myprintf() / myscanf() точно не нужно делать?
Yandex
Объявления
25.01.2011, 23:25     Мне надо сделать поиск последнего вхождения подстроки s1 в строку s(с функцией LastPos, не strstr). В этом коде просто вхождение подстроки в строку.
Ответ Создать тему
Опции темы

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