Стандартные функции обработки строк
Большинство действий над строками реализуется с помощью стандартных функций. Библиотека языка Си содержит большое количество таких функций, прототипы которых определяются в заголовочном файле 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;
}
Контрольные задания
Подготовить текст исходного предложения в соответствии с вариантом задачи, указанным в таблице (предложение должно заканчиваться точкой, разделитель слов в предложении - пробел). Составить программу и выполнить ее на ПК.
Вариант | Условие задачи |
Из заданного предложения, начиная с первой встретившейся буквы 'а', скопировать в подстроку все символы до первой встретившейся буквы ' к'. | |
В исходном предложении все символы пробела заменить символами подчеркивания. | |
Вывести символы, которые встречаются в исходном предложении по одному разу. | |
В исходном предложении удалить все символы пробела. Вывести преобразованный текст и количество удаленных пробелов. | |
Определить, сколько раз в заданном предложении встречается сочетание двух первых букв. | |
В качестве исходного предложения задать арифметическое выражение, записанное на языке С: . Проверить, соблюдается ли баланс открывающихся и закрывающихся скобок. Если равенство соблюдается, то вывести соответствующее сообщение, в противном случае вывести количества открывающихся и закрывающихся скобок. | |
В исходном предложении поставить между словами произвольное число пробелов. Отредактировать текст, удалив лишние пробелы и оставив только по одному пробелу. | |
В заданном предложении найти слово, в котором доля буквы 'а' максимальна. Вывести найденное слово и посчитать, сколько раз буква 'а' встречается в этом слове. | |
В заданном предложении символы самого длинного слова заменить символами 'х'. | |
Сформировать числовой массив N, элементы которого указывают длину каждого слова в исходном предложении. | |
В исходном предложении перед каждым словом поставить знак ?. | |
Составить строку, содержащую первые буквы из каждого слова заданного предложения. | |
В каждом слове заданного предложения поменять местами первую букву и последнюю. | |
Указать, сколько раз каждый символ встречается в заданном предложении. | |
В заданном предложении найти самое короткое и самое длинное слово. | |
Исходное предложение задать в виде арифметического выражения, записанного на языке С. Последовательность символов 'x[i]' в заданном предложении заменить последовательностью 'а[j]'. Вывести преобразованный текст, а также число произведенных замен. | |
В заданном предложении указать слово, в котором доля букв 'т' и 'р' максимальна. Вывести найденное слово и количество букв 'т' и 'р', встретившихся в этом слове. | |
В заданном предложении удалить все запятые. Вывести преобразованный текст, а также число удаленных запятых. | |
В заданном предложении заменить все строчные латинские буквы на прописные. Определить, сколько раз в преобразованном предложении встречается сочетание 'АВ’ | |
В заданном предложении в конце каждого слова поставить многоточие. Вывести преобразованное предложение, а также длину полученного текста. |