Стандартные функции обработки строк

Большинство действий над строками реализуется с помощью стандартных функций. Библиотека языка Си содержит большое количество таких функций, прототипы которых определяются в заголовочном файле string.h. Рассмотрим некоторые из них.

Сравнение строк:

strcmp(str1,str2) – сравнивает две строки str1 и str2 и возвращает 0, если они одинаковы; результат отрицателен, если str1<str2 и положителен, если str1>str2.

strncmp(str1, str2, kol) – сравниваются части строк str1 и str2 из kol символов. Результат равен 0, если они одинаковы.

Сравнение двух строк выполняется последовательно слева неправо с учетом кодировки символов. Например, сравнивая стоки st1 и st2

char st1[10]="Пример";

char st2[10]="ПPимер";

int a;

if (strcmp(st1,st2)>0)

a=1;

else

a=2;

переменной а будет присвоено значение 1, так как код символа 'р' больше кода символа 'Р'.

Сцепление строк

strcat(str1,str2) - сцепление строк в порядке их перечисления.

strncat(str1,str2,kol) – приписывает kol символов строки str2 к строке str1.

Функция служит для объединения двух строк в одну. Например, в результате выполнения операторов:

char fam[] = "Андреева С.В. ";

char pr[7]= " "; //7 пробелов

strcat(fam ,pr);

printf(“|%20s|”, fam);

на экран выведется строка:

|Андреева С.В. |

Заметим, что строка вывода занимает поле в 20 позиций, а переменная fam располагается в левой части поля.

Определение длины строки

strlen(str) – определяет длину строки str.

Пример.Определить длину строки

charfam[] = "Андреева С.В.";

printf("%d",strlen(fam));

функция strlen() вернёт значение равное 13 (символов).

Копирование строк

strcpy(str1,str2) – копирует строку str2 в строку str1.

strncpy(str1, str2, kol) – копирует kol символов строки str2 в строку str1.

Пример.Скопировать фамилию сотрудника в переменную fam и вывести на экран.

#include "stdafx.h"

#include<string.h>

int main()

{ char fam[15];

char *str = " Андреева С.В.";

strcpy(fam, str);

printf("|%s|\n", fam);

return 0;

}

В результате выполнения данных операторов на экран будет выведена строка:

|Андреева С.В.|

Поиск символа в стоке

strchr(st, ch) - функция поиска адреса символа ch в строке st. Результатом выполнения поиска является адрес найденного символа в строке st, иначе возвращается нулевой адрес. Чтобы вычислить порядковый номер символа ch в строке, можно из адреса P вычесть адрес начала строки.

Пример.В заданной фамилии определить порядковый номер символа ‘n’.

#include "stdafx.h"

#include<string.h>

int main()

{ char fam[] = "Ivanov";

char faml[20];

char a='n';

char *p;

p=strchr(fam,a);

if(p)

printf("|%s|%d\n", fam, p-fam);

else

printf("нет такого символа в фамилии!\n");

return 0;

}

Пример программы для задачи с текстовыми данными

Исходным текстом является предложение, заканчивающееся точкой. Слова в предложении отделяются друг от друга одним пробелом. Определить самое длинное слово в предложении.

#include "stdafx.h"

#include<string.h>

int main()

{ char slovo[12],x[120]; // описание строк

int i,m=0,n,k=0;

gets(x); // ввод строки х

for(i=0; i<strlen(x); i++) //цикл до конца строки х

if(x[i]!=' ') k++; // считаем символы до пробела

else

{ if (k>m){ m=k;n=i;} //поиск мах значения счетчика к

k=0;

}

k=0;

for(i=n-m;i<n;i++) //выбор из строки х самого длинного слова

slovo[k++]=x[i];

slovo[k]=0;

printf("%s \n%s\n",slovo,x); /*вывод найденного слова и всей строки х */

printf("%d %d\n",strlen(slovo),strlen(x));//вывод их длин

return 0;

}

Контрольные задания

Подготовить текст исходного предложения в соответствии с вариантом задачи, указанным в таблице (предложение должно заканчиваться точкой, разделитель слов в предложении - пробел). Составить программу и выполнить ее на ПК.

Вариант Условие задачи
Из заданного предложения, начиная с первой встретившейся буквы 'а', скопировать в подстроку все символы до первой встретившейся буквы ' к'.
В исходном предложении все символы пробела заменить символами подчеркивания.  
Вывести символы, которые встречаются в исходном предложении по одному разу.
В исходном предложении удалить все символы пробела. Вывести преобразованный текст и количество уда­ленных пробелов.
Определить, сколько раз в заданном предложении встречается сочетание двух первых букв.
В качестве исходного предложения задать арифметическое выражение, записанное на языке С: Стандартные функции обработки строк - student2.ru . Проверить, соблюдается ли баланс открывающихся и закрывающихся скобок. Если равенство соблюдается, то вывести соответствующее сообщение, в противном случае вывести количества открывающихся и закрывающихся скобок.
В исходном предложении поставить между словами произвольное число пробелов. Отредактировать текст, удалив лишние пробелы и оставив только по одному пробелу.
В заданном предложении найти слово, в котором доля буквы 'а' максимальна. Вывести найденное слово и посчитать, сколько раз буква 'а' встречается в этом слове.
  В заданном предложении символы самого длинного слова заменить символами 'х'.
  Сформировать числовой массив N, элементы которо­го указывают длину каждого слова в исходном предложении.
В исходном предложении перед каждым словом поставить знак ?.
Составить строку, содержащую первые буквы из каждого слова заданного предложения.
В каждом слове заданного предложения поменять местами первую букву и последнюю.
  Указать, сколько раз каждый символ встречается в заданном предложении.
В заданном предложении найти самое короткое и самое длинное слово.
Исходное предложение задать в виде арифметического выражения, записанного на языке С. Последовательность символов 'x[i]' в заданном пред­ложении заменить последовательностью 'а[j]'. Вывести преобразованный текст, а также число произведенных замен.
В заданном предложении указать слово, в котором доля букв 'т' и 'р' максимальна. Вывести найденное слово и количество букв 'т' и 'р', встретившихся в этом слове.
В заданном предложении удалить все запятые. Вывести преобразованный текст, а также число удаленных запятых.
В заданном предложении заменить все строчные латинские буквы на прописные. Определить, сколько раз в преобразованном предложении встречается сочетание 'АВ’
В заданном предложении в конце каждого слова поставить многоточие. Вывести преобразованное предложение, а также длину полученного текста.


Наши рекомендации