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

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

Войти
Регистрация
Восстановить пароль
 
Егорка47
7 / 6 / 1
Регистрация: 26.10.2010
Сообщений: 249
#1

подстрока - C++

22.01.2011, 10:45. Просмотров 756. Ответов 5
Метки нет (Все метки)

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

Подстрока - C++
Всем Приветы, вопрос на сейчас такой: Как получить подстроку из данной строки, если данная задаётся пользователем? Вот пример: ...

Завершающая подстрока - C++
Есть параметр std:::string Text и локальная переменная i, хранящая индекс символа. Требуется удалить из параметра начальные символы по этот...

Подстрока в пределах от M до N - C++
помогите пож преобразовать в с++,за ранее спасибо Var i,m,n:byte; a,b:string; begin write('Введите слово'); ...

Наибольшая общая подстрока - C++
Люди из раздела "алгоритмы" молчат.. спрошу тут..Прошу прощения за "флуд". На днях отправил резюме в Яндекс. Откуда мне прислали...

Подстрока, заключенная в кавычки - C++
Всем добрый день! Вот такая примерно задачка. Имеется string S1="This is the long string having some words \"in quotes\""; Надо...

Задача: плохая подстрока. Усовершенствовать алгоритм - C++
Задача: Найдите, сколько существует строк заданной длины n, состоящих только из символов 'a', 'b' и "c", и не содержащих подстроки...

5
RUSya82
236 / 114 / 3
Регистрация: 15.10.2010
Сообщений: 395
22.01.2011, 10:59 #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
//-----------Функция поиска подстроки, реализующая алгоритм Бойра-Мура   
int findBM (char A[], int n, char S[], int m)
{
      int i, j, k;
      int r[256]; //Массив сдвигов
      for (k=0;k<256;k++) //заполняем сначала весь массив значениями m
         r[k] = m;
      for (j=0;j<m-1;j++)
      {
         r[(int)(S[j])] = m-j-1;
      }
      i = m;
      j = m;
      //-----начинаем поиск
      do
      {
         j=m;//так как поиск начинается с конца, то
         k=i;
         do
         {
            j--;//нумерация элементов массива начинается с нуля
            k--;
         }while((j>=0) && (A[k] == S[j]));//цикл прерывается, если все символы совпали, или произошел промах
         i = i + r[(int)(A[i-1])];//промах произошел на i-1 элементе, сдвигаемся на соответсвующее количество символов
      }while ((j>=0) && (i <= n));//если j<0, то совпадение найдено, если i>n,то проверили весь массив А
      if (j<0)
         return k+1;
      else  
         return -1;
}
1
Егорка47
7 / 6 / 1
Регистрация: 26.10.2010
Сообщений: 249
22.01.2011, 11:17  [ТС] #3
для чего массив 256?можете написать комментарии ко всей программе более подробно,для очень тупыхбуду должен!
0
RUSya82
236 / 114 / 3
Регистрация: 15.10.2010
Сообщений: 395
22.01.2011, 11:49 #4
Это массив сдвигов. Туда мы пишем сдвиг для каждого из 256 символов таблицы ASCII. По моему комментов достаточно. Если хочешь понять, то лучше почитай в чем состоит сам алгоритм - чего я сам не помню толком, так как давно писал. Тут два варианта: либо ты просто почитаешь сам, либо должен читать(вспоминать) я , а потом рассказывать тебе. По моему первый вариант проще.
1
Егорка47
7 / 6 / 1
Регистрация: 26.10.2010
Сообщений: 249
22.01.2011, 11:53  [ТС] #5
я просто с телефоналадно,все равно спасибо огромное!
0
panicwassano
592 / 560 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
22.01.2011, 14:00 #6
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;
}
C
1
2
3
4
5
6
char *substr;
substr = GetSubStr("два", "один два три четыре");
if (substr)
{
    cout << "Заданная подстрока: " << substr << endl;
}
0
22.01.2011, 14:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.01.2011, 14:00
Привет! Вот еще темы с ответами:

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

Определить позицию, с которой подстрока входит в строку - C++
не работает программа, выдает ошибки помогите плз // Лабораторная работа №3 // Массивы // #include &quot;stdafx.h&quot; #include...

Определить, сколько раз данная подстрока входит в строку - C++
Вводятся подстрока и строка. Определить, сколько раз данная подстрока входит в строку. Наложение строк не учитывать, т.е. в строку aaaa...

Функция определяющая сколько раз в строке встречается заданная подстрока - C++
Напишите функцию Count, которая получает два параметра str1 и str2, типа string и возвращает число, указывающее сколько раз str2...


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

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

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