Выше упоминалось, что
#include
using namespace std;
int find_substr(char *sub, char *str);
int main()
{
int index;
index = find_substr("три", "один два три четыре");
cout << "Индекс равен " << index; // Индекс равен 9.
return 0;
}
// Функция возвращает индекс искомой подстроки или -1, если она не была найдена.
int find_substr(char *sub, char *str)
{
int t;
char *p, *p2;
for(t=0; str[t]; t++) {
p = &str[t]; // установка указателей
p2 = sub;
while(*p2 && *p2==*p) { // проверка совпадения
p++; p2++;
}
/* Если достигнут конец р2-строки (т.е. подстроки), то подстрока была найдена. */
if(!*p2) return t; // Возвращаем индекс подстроки.
}
return -1; // Подстрока не была обнаружена.
}
Результаты выполнения этой программы таковы.
Индекс равен 9
Поскольку искомая подстрока существует в заданной строке, выполняется первая инструкция
Функцию можно объявить так, чтобы она возвращала значение любого типа данных, действительного для C++ (за исключением массива: функция не может возвратить массив). Способ объявления типа значения, возвращаемого функцией, аналогичен тому, который используется для объявления переменных: имени функции должен предшествовать спецификатор типа. Спецификатор типа сообщает компилятору, значение какого типа данных должна возвратить функция. Указываемый в объявлении функции тип должен быть совместимым с типом данных, используемым в инструкции return. В противном случае компилятор отреагирует сообщением об ошибке.
Как вы заметили, функции, которые не возвращают значений, объявляются с указанием типа
#include
using namespace std;
void print_vertical(char *str);
int main(int argc, char *argv[])
{
if(argc==2) print_vertical(argv[1]);
return 0;
}
void print_vertical(char *str)
{
while(*str)
cout << *str++ << '\n';
}
Поскольку
х = print_vertical("Привет!"); // ошибка
Важно!