Создание и использование функций. Функция выделения подстроки из строки

   
На этом шаге мы рассмотрим особенности создания такой функции.

   
Приведем текст функции substr():

void substr(char v[], char s[], int n, int m)
{
	//n-й элемент находится R массиве на (п-1)-м месте
	int  i,j; 
	for(i=0,j=n-1;j<(n-1+m); i++, j++)
		v[i]=s[j];
	v[i]='\0';
}

   
Эта функция с именем substr() ничего не возвращает (тип возвращаемого значения - void), а на свой вход получает строку символов char s[] (вспомним, что строка символов в
языке С задается массивом символов), порядковый номер символа, с которого требуется выделить подстроку (int n), количество символов, которое требуется выделить (int m).
А выходным параметром будет выделенная подстрока (char v[]).

   
Алгоритм очень прост: в цикле участвуют две переменные: i и j. Цикл организован с помощью конструкции for. Здесь мы имеем пример того, что в первом (инициализирующем)
выражении конструкции for может быть более одной переменной (или одного выражения). Такие переменные должны отделяться друг от друга запятой, которую в этом случае называют
"операция Запятая". Соответственно и в третьем выражении циклической конструкции for, где наращиваются переменные цикла, имеется более одной переменной, которые также разделены запятой.

   
Цикл начинается заданием значений переменных цикла: индекс i начинается с нуля, т. к. массив формируется с нулевого элемента. В нашем случае индекс i - это порядковый номер символов,
заносимых в массив v[].

   
Переменная j начинается с n-i, т. к. с ее помощью станут извлекаться элементы из массива s[] (т. е. из выделяемой строки). Первый элемент (в данном случае - символ) надо
извлечь с места n-i, поскольку пользователь этой функции задает нумерацию в естественном порядке, т. е. считает, что строка начинается с первого, а не с нулевого символа.

   
Тело for состоит всего из одного оператора v[i]=s[j]. В нем происходит пересылка символа из входной строки с места j в выходную строку на место i. И так будет
продолжаться до тех пор, пока условие продолжения/окончания цикла не нарушится, пока значение переменной j, меняясь в третьем выражении от итерации к итерации, не станет равным (n-i+m),
т. е. не изменится m раз. Это будет означать, что все необходимые символы из s[] пересланы в v[]. Остается только выполнить требование языка С в отношении признака
конца строки символов: добавить в конец символ \0.

   
На следующем шаге мы продолжим изучение этого вопроса.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий