Я признаю, что иногда мне нужно увидеть чужой код, прежде чем ранее неясная функция стала полезной для меня. В качестве примера можно привести функцию strchr () , которую я редко использую.

Функция strchr () сканирует первый экземпляр символа в строке. Прототип в string.hшапке, вот формат:

char * strchr( const char s*, int c);

sявляется строкой и cявляется символом. Если cв строке найден символ, sвозвращается его местоположение (указатель), в противном случае возвращается указатель NULL. Это определение man-страницы, и я всегда смотрел на функцию, которую я только что обнаружил.

Другой способ взглянуть на strchr () состоит в том, что он подтверждает наличие символа cв строке s. Этот обратный взгляд на функцию делает ее более интересной для меня. Я видел, что этот подход использовался как решение проблемы: как определить, является ли первый символ строки гласным?

Вот функция:

if( strchr("aeiouAEIOU",text[0]) )

Первый символ строки представлен как text[0]. Строка сравнения представляет собой набор всех гласных букв как в нижнем, так и в верхнем регистре. Если символ в начале строки соответствует какому-либо символу в строке гласного, возвращается указатель. Он не сохраняется, но сам указатель устанавливает результат сравнения ifв true. В противном случае NULLуказатель устанавливает результат в false.

Я никогда не думал об использовании функции strchr () в обратном направлении. Он представил восхитительное и эффективное решение для того, что иначе было бы сложным алгоритмом тестирования. Вот тестовый код, который я написал:

#include <stdio.h>
#include <string.h>

int main ()
{
    char text [] = "abcdef";

    if (strchr ("aeiouAEIOU", текст [0]))
        printf ("% s начинается с гласной \ n", текст);
    еще
        printf ("% s не начинается с гласной \ n", текст);

    Возвращение (0);
}

И вывод:

'abcdef' starts with a vowel

Если я изменю text[]строку так, чтобы она начиналась с Z, вывод изменится на:

'Zabcdef' does not start with a vowel

Функция strchr () имеет сопутствующую функцию strrchr () , где дополнительный rобозначает реверс. В этой функции указатель возвращается для последнего вхождения или символа cв строке s. Я не могу придумать, как превратить эту функцию во что-то умное, поэтому я подожду, пока не увижу, как кто-то другой использует ее, затем украду ее и опубликую здесь.

Кстати, персонаж cможет быть нулевым символом \0. Если указано, возвращаемый указатель ссылается на нулевой символ в конце строки s.