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

Поиск подстроки в строке - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.67
koldun_89
4 / 1 / 0
Регистрация: 09.01.2010
Сообщений: 52
03.06.2011, 17:20     Поиск подстроки в строке #1
Добрый вечер. Помогите пожалуйста с заданием, нужно срочно его сделать. Сам текст: даны 2 массива (один большой, другой маленький), нужно написать функцию, которая ищет подстроку в строке. Т.е. получается идет поиск одного массива в другом. В итоге получается 4 параметра: это 1-ый массив и его длина, и 2-ой массив, который мы ищем и соответственно его длина. У меня есть только сама функция, но я не знаю правильная она или нет, к тому же ее наверно нужно дописать.

Код
#include <stdio.h>
#include <stldlib.h>

int poisk(int *a, int n, int *b, int m)
{
    for (i = 1; i <= n-m+1; i++)
    {
         j = 0;
         while (j < m && A[i+j] == B[j+1]) 
             j++;
         if (j == m) 
             return -1;
    }
}
Жду помощи...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2011, 17:20     Поиск подстроки в строке
Посмотрите здесь:

C++ Поиск подстроки в строке
Поиск подстроки в строке C++
C++ Поиск подстроки в строке
C++ Поиск подстроки в строке
C++ поиск подстроки в строке
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
03.06.2011, 17:35     Поиск подстроки в строке #2
поиск подстроки в строке - это strstr()...
в вашем случае надо сравнивать куски памяти

вот что-то сваял
C
1
2
3
4
5
6
int f(int* a1, int* a2, int s1, int s2) {
    for (int i=0; i<s1-s2; i++)
        if (memcmp(a2,a1+i,s2*sizeof(int))==0) return 1;
 
    return 0;
}
1 если нашел , 0 - если нет


так возвращает указатель на место в памяти:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int* f(int* a1, int* a2, int s1, int s2) {
    for (int i=0; i<s1-s2; i++)
        if (memcmp(a2,a1+i,s2*sizeof(int))==0) return a1+i;
 
    return 0;
 
}
//пример
int main() {
    int a1[14]={1,2,3,4,5,5,5,5,6,7,8,9,0};
    int a2[3]={3,4,5};
 
    std::cout << f(a1,a2,14,3)-a1+1;  // выведет место где нашлось
 
getchar();
}
koldun_89
4 / 1 / 0
Регистрация: 09.01.2010
Сообщений: 52
03.06.2011, 18:29  [ТС]     Поиск подстроки в строке #3
Что-то прям простенько оказалось) А не мог бы на С сделать? И если не трудно небольшое описание программы, а то мне ее отвечать надо будет
koldun_89
4 / 1 / 0
Регистрация: 09.01.2010
Сообщений: 52
05.06.2011, 14:19  [ТС]     Поиск подстроки в строке #4
Ау, OstapBender
koldun_89
4 / 1 / 0
Регистрация: 09.01.2010
Сообщений: 52
06.06.2011, 21:49  [ТС]     Поиск подстроки в строке #5
Мне надо не через memcmp, а как-то по другому. Помогите пл3
Yandex
Объявления
06.06.2011, 21:49     Поиск подстроки в строке
Ответ Создать тему
Опции темы

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