Процедурное программирование на языке С. Часть 2. Указатели на объекты. Многоуровневая адресация: Методические указания к лабораторным работам по курсам «Алгоритмические языки и программирование» и «Процедурное программирование», страница 20

Для конкатенации (склеивания) строк  используется функция strcat() с заголовком char * strcat(char * str_1, constchar * str_2).

Функция копирует байты, расположенные по адресу str_2 в конец строки символов, на которую указывает str_1. В процессе копирования символ ‘\0’, завершающий строку с адресом str_1, стирается, на его место записывается первый символ строки с адресом str_2. Результирующая строка, адрес которой возвращается в точку вызова функции, завершается нулевым символом. При этом вторым аргументом функции может быть строковый литерал, по аналогии с функцией  strcpy().

Длину строки определяет функция с заголовком size_tstrlen(constchar * str). Ее возвращаемое значение  –  количество символов в строке с адресом str до символа ‘\0’.

Функция с заголовком  intstrcmp(char * str_1, constchar * str_2) сравнивает строки символов, на которые указывают str_1 и str_2.  Целочисленное значение, возвращаемое функцией, меньше 0, равно 0 или больше 0 в зависимости от того, меньше, равна или больше строка с адресом str_1 по сравнению со строкой с адресом str_2 (соответственно).

Функция с заголовком  size_tstrspn (constchar * str_1, constchar * str_2) осуществляет поиск самой длинной строки символов, начиная с адреса str_1 при условии, что она должна содержать только те символы, которые находятся в строке, адресуемой str_2. Определяется местоположение первого символа в строке с адресом str_1, который отсутствует во второй строке.  Значение, возвращаемое функцией,  – это длина подстроки из строки с адресом str_1, символы которой соответствуют строке  с адресом str_2.

Замечание. Функции strncpy(), strncat(), strncmp(), strnset()работают аналогично функциям strcpy(), strcat(),strcmp(), strset()но при этом имеют дополнительный параметр  nтипа  int, обрабатывая только первые  nсимволов соответствующих строк. Работа функции strncmp() завершается, если среди первых nсимволов строки с адресом str_1 обнаруживается нулевой символ.

При сравнении строк на наличие одинаковых символов в некоторых задачах следует учитывать (не учитывать) регистр. Для этого необходимо осуществлять перевод буквы верхнего регистра в соответствующие буквы нижнего регистра (и наоборот).

Функция char * strlwr(constchar * str) преобразует буквы верхнего регистра в строке с адресом str в соответствующие буквы нижнего регистра. Возвращаемым значением является адрес, по которому записана преобразованная строка.

Аналогично функция char * strupr(constchar * str) преобразует буквы нижнего регистра в строке с адресом str в соответствующие буквы верхнего регистра

В примере 6.5 с использованием функции realloc() с клавиатуры вводится строка заранее не определенной длины, состоящая из пробелов, прописных и строчных латинских букв   с точкой в конце. После преобразования малых (строчных) букв   в прописные осуществляется  проверка допустимости   всех букв строки (допустимы пробелы и латинские буквы). Далее выбираются все буквы из диапазона от K до T и сортируются в алфавитном порядке. Упорядоченная строка выводится на экран.

Пример 6.5.

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

    void main()

     {  int i,j,n=0,k=0,m=0; char *st=NULL,*str,*uk=NULL,help,p;     

        printf("\n Vvod stroki - latin letters. End stroki - tohka\n");

      do {  scanf("%c",&p);      str=(char*)realloc(st,(n+1)*sizeof(char));

              if(str == NULL)    {printf("\nOut of memory! \n");exit(0); }

              st = str;     st[n]=p;     n++;

            }     while( st[n-1] != '.');   

strlwr(st);  /* Перевод латинских букв в буквы нижнего регистра */                                

       for(i=0;i<n-1;i++) /*Проверка допустимости символов  строки */

{ for(p='a';p<='z';p++)

              if((st[i]==' ') || (st[i] == p))  m=1;

               if(m!=1)  { printf("\n Error \nst[%d]=%c",i,st[i]);exit(0); }         

m=0;

           }