Функции над строками

В языке Си существует много функций работы над строками. Рассмотрим некоторые из них.

1.3.1. Функция strlen (str) вычисляет длину строки. Тип результата unsigned (беззнаковый).

1.3.2. Функция strcat (str1, str2) приписывает строку str2 к строке str1, и это объединение становится новой первой строкой. Функция strncat (str1, str2, kol) приписывает kol символов строки str2 к строке str1. Например,

main ()

{ static char str1[ ] = “СТРОКА”;

char *str2 = “_СИМВОЛОВ”;

strcat (str1, str2);

puts (str1);

strncat (str1, str2, 3);

puts (str1);

}.

В результате работы программы получим:

СТРОКА_СИМВОЛОВ
СТРОКА_СИМ

1.3.3.Функция strcpy (str1, str2) копирует строку str2 в строку str1.

Пример.

main ()

{static char str1[ ]=”СТРОКА”;

char *str2=”СИМВОЛОВ”;

strcpy (str2,str1);

puts (str2);

strncpy (st1,st2,3);

puts (st1);

}.

В результате работы программы получим

СТРОКА

СИМОКА

При работе strcpy информация из str1 скопировалась в str2. Строка, куда копируется информация, должна быть не меньше той строки, из которой информация копируется. Функция strncpy скопировала 3 первых символа из строки st2 в строку st1. Но поскольку признак конца строки стоит после буквы А, будет получен приведенный выше результат. Если требуется закончить строку на трех скопированных символах, то необходимо после третьего символа (по счету он будет вторым, т.к. отчёт начинается с нуля) поставить признак конца строки. Для этого в программу перед последним puts требуется ввести оператор st1[3]=’\0’;

1.3.4. Функция strchr (str,c) находит в строке str первое вхождение символа, определяемое параметром С. Функция strrchr (str,c) находит в строке str, последнее вхождение символа, определяемое параметром С.

Пример,

main ()

{static char st1[ ] = ”СТРОКА”;

char *ptr, c =’p’

ptr =strchr (st1,c);

if (ptr)

printf(“%d”,ptr-st1);

else

printf (“нет символа”);

}.

В результате работы программы будет выведено число 2. Символ ‘р’ стоит на втором месте, т.к. отсчёт начинается с нуля.

Переменной С присвоено значение символа, который должен быть найден в строке. Указатель ptr после выполнения функции strchr получает либо значение адреса, где содержится искомый символ, либо его значением становится NULL, если символ не найден. Поскольку st1 является адресом первого символа строки, то ptr-st1 покажет местоположение символа в строке. Функция strrchr работает аналогично функции strchr.

1.3.5.Функция strpbrk(str1,str2) находит в строке str1 первое появление любого из множества символов, входящих в строку str2.

Пример,

main ()

{ static char st1[ ]=”СТРОКА”;

char *ptr;

char *st2 = ”рок”;

ptr = strpbrk (st1,st2);

if (ptr)

printf (“%d”,ptr-st1);

else

printf (“нет символов”);

}.

Результатом работы программы будет число 2.Эта программа отличается от предыдущей лишь тем, что поиск ведётся, исходя из множества символов инициализированных в нашей программе с помощью указателя st2.

1.3.6. Функция strset (str,c) заменяет все символы строки str на значение, определяемое параметром С.

Функция strnset(str,c,kol) заменяет kol символов строки str на значение, определяемое параметром С.

Пример,

main ()

{ static char st1[ ]=”СТРОКА”;

{ static char st2[ ]=”СИМВОЛ”;

char letter = ’x’;

strset (str1, letter);

puts (str1);

strnset (str2, letter,3);

puts (str2);

}.

В результате работы программы будет получено:

ХХХХХХ

ХХХВОЛ

1.3.7.Функция strcspn (st1,st2) определяет местоположение символа строки st1, который первым совпал с одним из символов строки st2.

Пример,

main ()

{ static char str1[ ]=”СИМВОЛ”;

{ static char str2[ ]=”ВОЛ”;

int n;

n=strcspn (str1,str2);

printf (“%d”,n);

}.

В результате работы программы будет получено значение переменной n равное трём. Это произошло потому, что первым совпавшим символом в строках str1 и str2 является символ ‘B’, а он стоит на третьем месте (отсчёт начинается с нуля).

Функция strspn (st1,st2) определяет местоположение символа строки st1, который первым не совпал с одним из символов строки st2.

Пример,

main ()

{ char *str1=”1234567890”;

char *str2=”123458”;

int n;

n=strspn (str1,str2);

printf (“%d”,n);

}.

В результате работы программы будет получено значение переменной n, равное пяти. Такой результат получен потому, что первым не совпавшим символом в строках str1 и str2 является символ ‘6’, а он стоит на пятом месте (отсчёт от нуля).

1.3.8. Функция strrev (str) меняет порядок следования символов на противоположный.

Приведём примеры с использованием расмотренных выше функции.

Пример 1.Подсчитать количество символов ‘a’ в строке.

main ()

{char *str;

int n,k,i;

gets (str); /*ввод строки */

n = strlen (str); /* определение количества символов в строке*/

for (k=0, i=0; i<n; i++) /*подсчёт количества символов ‘а’*/

if (str[i]==’a’) k=k+1;

printf (“%d”,k); /*вывод количества символов*/

}.

Пример 2.Решить задачу из примера 8, применив указатель.

main ()

{char *str;

gets (str);

while (*str!=’\0’); /*проверка на наличие конца строки*/

if (*str==’a’) k=k+1; /*подсчёт количества символов ‘а’*/

str++; /*смещение указателя на очередной символ*/

puts(str);

}.

Пример 3. В примере демонстрируется вывод разных частей строки.

main ()

{static char st [ ] = “До встречи”;

char *ptr;

ptr = st;

puts (str); /* вывод строки*/

puts (++ptr); /* смещение указателя на первый символ строки и вывод строки*/

st [ 7 ] = ‘ \0 ’; /* признак конца строки помещается на место седьмого символа строки */

puts (st); /* вывод получившейся строки */

puts (++ptr); /* смещение указателя с первого символа нп второй и вывод строки*/

}.

В результате работы программы будет выведена следующая информация:

До встречи

о встречи

до_встр

_встр

Пример 4.

main ()

{static char st [ ] = “ СТРОКА ”;

char *ptr;

ptr = st + strlen (st); /* установка указателя на конец строки*/

while (-- ptr >-=st) /* смещение указателя с первого символа на второй и вывод строки*/

puts (ptr);

}.

Результат работы программы:

А

КА

ОКА

РОКА

ТРОКА

СТРОКА

Пример 5. Определить первый пробел в строке и вывести строку с этой позиции и до конца. Если нет ни одного пробела, то выдать об этом сообщение.

main ()

{ char *st;

gets (st); /* ввод строки*/

while (st! = ‘_’ &&*st! = ‘\0’)

st++; /* останавливается на первом пробеле или нуль-символе*/

if (st == ‘\0’)

printf (“нет пробела”);

else

puts (st);

}.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: