Norbert27
Компетентный
Возврат указателей
Функции могут возвращать указатели. Указатели возвращаются, как и данные любых других типов, и не вызывают никаких особых проблем. Если, однако, учесть, что указатели являются одним из наиболее сложных средств C++, краткое обсуждение этой темы вполне уместно.
В приводимой ниже программе демонстрируется использование указателя в качестве возвращаемого значения. Функция get_substr() просматривает строку в поисках заданной подстроки. Функция возвращает указатель на первую найденную подстроку. Если заданной подстроки найти не удалось, возвращается нулевой указатель. Например, если анализируется строка "Я люблю C++", а в качестве искомой задана подстрока "люблю", то функция вернет указатель на первую букву л в слове "люблю".
Вот вывод этой программы:
подстрока найдена: три четыре
Функции могут возвращать указатели. Указатели возвращаются, как и данные любых других типов, и не вызывают никаких особых проблем. Если, однако, учесть, что указатели являются одним из наиболее сложных средств C++, краткое обсуждение этой темы вполне уместно.
В приводимой ниже программе демонстрируется использование указателя в качестве возвращаемого значения. Функция get_substr() просматривает строку в поисках заданной подстроки. Функция возвращает указатель на первую найденную подстроку. Если заданной подстроки найти не удалось, возвращается нулевой указатель. Например, если анализируется строка "Я люблю C++", а в качестве искомой задана подстрока "люблю", то функция вернет указатель на первую букву л в слове "люблю".
Код:
// Возврат указателя.
#include <iostream>
using namespace std;
char *get_substr(char *sub, char *str);
int main()
{
char *substr;
substr = get_substr ("три", "один два три четыре");
cout << "подстрока найдена: " << substr;
return 0;
}
// Возвращает указатель на подстроку или нулевой указатель,
// если подстрока не найдена.
char *get_substr(char *sub, char *str) <----------- [B]get_substr()[/B] возвращает указатель на [B]char[/B]
{
int t;
char *p, *p2, *start;
for(t=0; str[t]l t++) {
p = &str[t]; // начальная установка указатей
start = p;
p2 = sub;
while (*p2 && *p2==*p) { // проверка на наличие подстроки
p++;
p2++;
}
/* Если p2 указывает на завершающий 0 (т.е. на конец подстроки), значит, вся подстрока найдена. */
if (!*p2)
return start; // вернуть указатель на начало подстроки
}
return 0; // подстрока не найдена
}
подстрока найдена: три четыре
