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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 30, средняя оценка - 4.77
gera3323
2 / 2 / 0
Регистрация: 26.08.2010
Сообщений: 51
#1

Функция поиска подстроки в строке - C++

22.08.2012, 16:51. Просмотров 4045. Ответов 4
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int CChar::strpos(char* sub, char* str)
{
  char* temp = new char[strlen(sub)+1];
  int t=0;
 
   for(int i=0; i<strlen(str); i++)
   {
     while(str[i]==sub[t])
       temp[t++] = str[i++];
 
      temp[t] = '\0';
 
       t=0;
     if(strcmp(temp,sub)==0) return i-strlen(sub);
   }
   return 0;
}
строки sub и str в нижнем регистре.

все ли правильно в этой функции? можно ли ее оптимизировать ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.08.2012, 16:51     Функция поиска подстроки в строке
Посмотрите здесь:
Функция поиска подстроки в строке. Как вернуть указатель? C++
Строки(функция поиска подстроки) C++
C++ Алгоритмы поиска подстроки в строке
Реализовать функцию поиска подстроки в строке C++
C++ Алгоритм Бойера-Мура поиска подстроки в строке (Js -> C++)
C++ Изменить код алгоритма поиска подстроки в строке
C++ Ошибка в функции поиска подстроки в строке. Алгоритм Бойера-Мура-Хорспула.
Функция находящее в строке заданное вхождение подстроки C++
C++ Функция: замена подстроки в строке на заданную строку
C++ Функция поиска строки в строке
Функция поиска слов в строке C++
Рекурсивная функция поиска символов '0' в строке C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Intel~lect
135 / 124 / 2
Регистрация: 03.07.2012
Сообщений: 355
22.08.2012, 18:10     Функция поиска подстроки в строке #2
Динамическая память выделяется:
Цитата Сообщение от gera3323 Посмотреть сообщение
char* temp = new char[strlen(sub)+1];
А освобождения нет
C++
1
delete [] temp;
gera3323
2 / 2 / 0
Регистрация: 26.08.2010
Сообщений: 51
23.08.2012, 00:13  [ТС]     Функция поиска подстроки в строке #3
Цитата Сообщение от Intel~lect Посмотреть сообщение
Динамическая память выделяется:

А освобождения нет
C++
1
delete [] temp;

освобождение памяти тут не надо, когда подпрограмма завершится память будет освобождена автоматически.

да и где тут оператор delete [] temp ставить ? перед ретурн, дак тогда, что возвращатся будет, если после он не выполниться
D-Vampire
3 / 3 / 0
Регистрация: 16.05.2012
Сообщений: 36
23.08.2012, 00:41     Функция поиска подстроки в строке #4
Цитата Сообщение от gera3323 Посмотреть сообщение
освобождение памяти тут не надо, когда подпрограмма завершится память будет освобождена автоматически.
Эт не c#, чтобы подбирать за программистом. Попробуйте использовать вашу функцию в цикле и проследите за размером подтребляемой памяти в диспетчере задач.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.08.2012, 02:52     Функция поиска подстроки в строке #5
Цитата Сообщение от gera3323 Посмотреть сообщение
да и где тут оператор delete [] temp ставить ? перед ретурн, дак тогда, что возвращатся будет, если после он не выполниться
Именно перед return. И почему это он не выполнится, если перед ним delete [] temp сделать?

Добавлено через 6 минут
Цитата Сообщение от gera3323 Посмотреть сообщение
когда подпрограмма завершится память будет освобождена автоматически.
Память, выделяемая с помощью new, сохраняется до окончания работы всей программы.
Yandex
Объявления
23.08.2012, 02:52     Функция поиска подстроки в строке
Ответ Создать тему
Опции темы

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