АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

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

Читайте также:
  1. I. Прокурор: понятие, положение, функции и профессиональные задачи.
  2. I. Функции окончания «-s»
  3. I. Функции окончания «-s»
  4. III Участники игры и их функции
  5. III. Методы оценки функции почек
  6. III. Полномочия и функции территориального фонда
  7. IV. Состояние дыхательной функции
  8. V. Состояние голосовой функции
  9. Алгоритм оценки и проверки адекватности нелинейной по параметрам модели (на примере функции Кобба-Дугласа).
  10. Артефакты как базовые элементы материальной культуры, их виды и функции.
  11. Аттестация гражданских служащих: понятие, цель, задачи, система, функции и принципы аттестации. Квалификационный экзамен.
  12. Б) Социокультурные функции языка.

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

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);

}.

 

Задание

Задание взять из таблицы согласно варианту и написать программу.

 

Номер вар-та В Задание
  Заданы 2 строки, состоящие из слов, разделенных пробелами. Объединить обе строки и поменять местами второе и третье слова.
  Заданы 2 строки, состоящие из слов, разделенных пробелами. Скопировать пять символов второй строки в первую. Получить из измененной первой строки новую, в которой не будет последнего и предпоследнего слов.
  Заданы 2 строки, состоящие из слов, разделенных пробелами. Приписать первое слово второй строки к первой. Получить из измененной первой строки новую, в которой не будет первого слова.
  Заданы 2 строки, состоящие из слов, разделенных пробелами. Определить первое вхождение символа “м” в строке и вывести строку, начиная с этой позиции и до конца. Если такого символа в строке нет, то удалить второе слово и вывести получившуюся строку.
  Заданы 2 строки, состоящие из слов, разделенных пробелами. Определить последнее вхождение символа “р” в строке и вывести строку, начиная с первого символа и до последнего “р” в строке. Если такого символа нет, то вывести всю строку, исключив из нее последнее слово.
  Заданы 2 строки, состоящие из слов, разделенных пробелами. Если последнее слово больше предпоследнего, то заменить первые пять символов буквой “а”, в противном случае все символы заменить на “*”.
  Заданы 2 строки, состоящие из слов, разделенных пробелами. Если второе слово первой строки такое же, как второе слово второй строки, то поменять порядок следования символов первой строки на противоположный, в противном случае заменить все символы второй строки на “!”
  Заданы 2 строки, состоящие из слов, разделенных пробелами. Определить местоположение символа первой строки, который первым совпал с одним из символов второй. Вывести первую строку, исключив из нее слово, в которое входит этот символ. Вторая строка пробелами не разделена.
  Заданы 2 строки, состоящие из слов, разделенных пробелами. Определить местоположение символа первой строки, который первым не совпал с одним из символов второй строки. Вывести слово, в которое входит этот символ.
  Заданы 2 строки, состоящие из слов, разделенных пробелами. Приписать три символа второй строки к первой. Поменять местами в измененной первой строке первое и последнее слово.
  Заданы 2 строки, состоящие из слов, разделенных пробелами. Определить первое вхождение символа “d” в строке и вывести слово, в котором оказался этот символ. Если такого символа нет, то изменить порядок следования символов на противоположный.
  Заданы 2 строки, состоящие из слов, разделенных пробелами. Определить местоположение символа первой строки, который первым совпал с одним из символов второй строки. Приписать ко второй строке часть первой, начиная с этого символа. Если этого совпадения не произойдет, то все символы второй строки заменить нулями.
  Заданы 2 строки, состоящие из слов, разделенных пробелами. Определить местоположение символа первой строки, который первым не совпал с одним из символов второй строки. Выделить слово, в которое входит эото символ, и приписать его ко второй строке.
  Заданы 2 строки, состоящие из слов, разделенных пробелами. Приписать второе слово второй строки к первой. Поменять порядок следования символов первой строки на противоположный.
  Заданы 2 строки, состоящие из слов, разделенных пробелами. Если первое слово первой строки равно последнему слову второй, то приписать к первой строке первое слово второй, в противном случае вывести вторую строку, исключив из нее последнее слово.

 

Литература

1. Подбельский В.В. Язык Cu ++: Учебное пособие. - М.: Финансы и статистика,1995, - 560 с.

2. Страуструп Б. Язык программирования Сг ++. - М.: Радио и связь, 1991. - 352 стр.

3. Собоцинский В.В. Практический курс Turbo Cu ++. Основы объктно- ориентированного программирования. - М.: Свет, 1993. - 236 с.

4. Романов В.Ю. Программирование на языке Cu ++. Практический подход. - М.: Компьтер, 1993. - 160 с.

5. Уинер Р. Язык турбо Cu. - М.: Мир, 1991. - 384 с.

6. Юлин В.А., Булатова И.Р. Приглашение к Cu. - Мн.: Высш. Шк., 1990,- 224 с.

7. Котлинская Г.П., Галиновский О.И. Программирование на языке Cu. -Мн.: Высш. Шк., 1991. - 156 с.

 


1 | 2 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.009 сек.)