При разработке программного обеспечения функции сравнения символьных строк часто применяются для прикладного программирования алгоритмов сортировки и поиска текстовых данных. Прикладное использование функции strcmp демонстрирует следующий пример поиска заданного слова в словаре, где все слова лексиграфически упорядочены по алфавиту. Предполагается, что все слова задают строки символов. Также предполагается, что словарь организован в виде массива строк. Элементы этого массива имеют тип (char *) и содержат адреса слов словаря, кроме последнего элемента, который адресует нулевой указатель NULL, обозначая конец словаря. В прикладной программе такой словарь может быть специфицирован, например, следующим образом:
static char* operator[] = { "break",
                            "case",
                            "continue",
                            "default",
                            "do",
                            "else",
                            "for",
                            "if",
                            "return",
                            "switch",
                            "while",
                             NULL  };
Для организации поиска заданного слова в принятой конфигурации данных может быть реализован следующий исходный код, который оформлен в виде прикладной функции findword.
/* Словарный поиск */

int findword(char* dic[], char* word) {
int i = 0;                     /* словарный индекс */
int rez = (-1);                /* флаг результата сравнения */

/* Цикл поиска слова */
while(dic[i] != NULL) {

  /* Проверка очередного слова словаря */
  if((rez = strcmp(dic[i], word)) < 0)
    i++;
  else
    break;
} /* while */

/* Возврат результата поиска */
return((rez == 0) ? i : (-1));
} /* findword */

При вызове в функцию findword необходимо передать адреса словарного массива и искомого слова, которые обозначают указатели dic[] и word, соответственно. Для поиска заданного слова функция fidword реализует последовательность сравнений содержащей его строки со строками слов словаря, используя функцию strcmp. Поиск продолжается, пока строка, содержащая текущее слово, лексиграфически меньше, чем строка искомого слова и не достигнут нулевой указатель NULL в конце словаря. При успехе поиска функция findword возвращает словарный индекс найденного слова, а при неудаче — отрицательный код (-1).
Не менее важной поисковой задачей является поиск требуемой информации в строке символов. Различные варианты организации операции поиска данных в символьной строке реализуют стандартные функции strchr, strrchr, strstr и strpbrk. Они позволяют обнаружить и установить расположение в строке определенного символа, символов заданного набора или фрагмента текста. Спецификация форматов их вызова имеет вид:
char* strchr (const char* str, int code);
char* strrchr(const char* str, int code);
char* strpbrk(const char* str, const char* key);
char* strstr (const char* str, const char* key);
Первый аргумент этих функций, обозначенный указателем str, передает адрес исходной строки символов, где требуется найти символьный объект, специфицированный вторым аргументом: code или key. Все функции должны возвращать адрес искомого объекта исходной строки, если он обнаружен, или нулевой указатель NULL, в противном случае.
Функции strchr и strrchr предназначены для поиска в исходной строке, соответственно, первого и последнего экземпляра символа, целочисленный код которого задает аргумент code. Все символы, которые сопоставляются при поиcке, интерпретируются как данные типа char, поэтому актуально только значение младшего байта параметра code. Завершающий символ с нулевым кодом '\0' считается частью исходной строки, то есть может быть обнаружен при поиске.
Функции strpbrk и strstr используют при поиске данные ключевой строки, адрес которой передается через указатель key. В частности, функция strpbrk ищет первый символ исходной строки, который совпадает с одним из символов ключевой строки. Завершающие символы с нулевым кодом '\0' в расчет не берутся. Функция strstr обеспечивает поиск первого вхождения в исходную строку последовательности символов ключевой строки без учета завершающего символа с нулевым кодом '\0'.
В прикладных программах рассмотренные функции могут быть использованы для контекстного поиска или замены заданных информационных объектов в строке символов. Их применение демонстрирует следующий исходный код упрощенной функциональной реализации прикладной команды basename из OS UNIX, которая выделяет базовое имя из заданного маршрутного имени файла.
/* Базовое имя файла */

char* basename(char* path, char* ext) {
char* b;      /* указатель базового имени файла */
char* e;      /* указатель расширения имени файла */

 /* Найти адрес базового имени */
if((b = strrchr(path, '/')) != NULL)
  b++;
else  b = path;

/* Отделить расширение */
if((e = strstr(b, ext)) != NULL)
  *e ='\0';
return(b);     /* Вернуть адрес базового имени */
} /* basename */

При вызове в функцию basename следует передать адреса символьных строк, содержащих маршрутное имя и расширение имени файла, которые обозначают указатели path и ext, соответственно. В OS UNIX маршрутное имя файла образует префикс из цепочки названий подкаталогов, разделенных символом '/', которую завершает базовое имя файла с последующим произвольным и необязательным суффиксом расширения. Расширение имени файла начинается с символа '.', как принято для любых операционных системах, в том числе, для OS UNIX. Таким образом, расположение базового имени ограничивает с одной стороны адрес первого символа после последнего префиксного кода '/' и адрес суффикса расширения с другой стороны. Эти адреса в функции basename предоставляют вызовы функций strrchr и strstr. Первый символ расширения '.' заменяет нулевой код '\0', чтобы отделить расширение от базового имени файла. Префикс подкаталогов исключает возврат адреса базового имени файла. Например, следующий вызов функции basename:
char* base = basename("/usr/include/string.h", ".h");
возвращает указателю base адрес символьной строки "string", выделяя из маршрутного имени файла /usr/include/string.h базовое имя string.
Наиболее интеллектуальной операцией обработки символьных строк является операция лексического разбора. Она обеспечивает разбиение содержимого исходной символьной строки на отдельные текстовые единицы, лексемы. При этом предполагается, что в исходной строке лексемы разделены символами из заданного набора. Выделение лексем в исходной строке символов при заданных разделителях реализует функция strtok. Спецификация формата ее вызова имеет вид:
char* strtok(char* str, const char* delimit);
Функция strtok рассматривает исходную строку символов, адресуемую через указатель str, как набор лексем, которые разделены в ней промежутками из одного или нескольких символов строки ограничителей, адресованной указателем delimit. В приведенной транскрипции функция strtok выполняет поиск первой лексемы исходной строки символов. Поиск остальных лексем гарантирует последовательность вызовов функции strtok, в которых адрес исходной строки заменяет нулевой указатель NULL, а строки ограничителей необязательно идентичны. Каждое из последовательных обращений к функции strtok определяет адрес очередной лексемы исходной строки и запоминает его, чтобы обеспечить продолжение лексического разбора. Первый символ промежутка после обнаруженной лексемы в исходной строке автоматически заменяет нулевой код '\0'. Это позволяет получать лексемы в формате символьных строк, но приводит к изменению содержимого исходной строки лексического разбора. Поэтому при необходимости следует сохранить копию исходной строки перед вызовом функции strtok. Результаты лексического разбора образует конечная последовательность адресов лексем исходной символьной строки, которые возвращают очередные вызовы функции strtok. Признаком завершения лексического разбора является возврат из функции strtok нулевого указателя NULL, когда очередная лексема не может быть обнаружена.
Следующий фрагмент C-кода иллюстрирует применение функции strtok для лексического разбора строки символической записи обыкновенной дроби с целью выделить последовательности цифр числителя и знаменателя дроби, которые разделяет обязательный символ '/' и необязательные пробелы.
char* nominator;                    /* адрес числителя дроби */
char* denominator;                  /* адрес знаменателя дроби */
char fraction[] = " 1 / 1000";      /* строка дроби 1/1000 */
nominator = strtok(fraction, "/ "); /* выделение числителя */
denominator = strtok(NULL, " /");   /* выделение знаменателя */
В этом примере два последовательных вызова функции strtok для исходной строки fraction, содержащей дробь " 1 / 1000", выделяют две лексемы: числителя "1" и знаменателя "1000", адреса которых сохраняют указатели nominator и denominator, соответственно. Они могут быть использованы, например, для последующих целочисленных преобразований и обработки.
В заключение следует отметить, что во многих популярных версиях системы программирования C набор стандартных функций обработки символьных строк расширяют дополнительные процедуры, уникальные только для данной конкретной реализации. В частности, в системе программирования Borland C дополнительно к стандартным введены, например, функции strlwr и strupr, которые обеспечивают преобразование содержимого заданной строки к символам нижнего и верхнего регистра, соответственно. Однако, при разработке мобильного программного обеспечения целесообразно применять только стандартные функции обработки символьных строк, чтобы исключить зависимость исходного кода программы от особенностей конкретных реализаций системы программирования C.