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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 30, средняя оценка - 4.77
gera3323
2 / 2 / 0
Регистрация: 26.08.2010
Сообщений: 51
22.08.2012, 16:51     Функция поиска подстроки в строке #1
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 в нижнем регистре.

все ли правильно в этой функции? можно ли ее оптимизировать ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Intel~lect
 Аватар для 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
5282 / 4801 / 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     Функция поиска подстроки в строке
Ответ Создать тему
Опции темы

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