Тема: Обработка символьной информации и строк

(4 часа)

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

Символьные константы используются для изображения отдельных знаков, имеющих индивидуальные внутренние коды. Символьная константа – это лексема, которая состоит из изображения символа и ограничивающих апострофов, например: ‘A’, ‘b’, ‘+’, ‘1’, ‘@’ и т. д. Внутри апострофов кроме символов изображаемых на дисплее или принтере в текстовом режиме можно использовать коды не имеющие графического представления на экране дисплея, принтере или клавиатуре. Для изображения в программе таких символьных констант используются комбинации из нескольких символов, имеющих графическое представление. Такие комбинации носят название управляющих последовательностей. В языке С существуют следующие управляющие последовательности:

‘\n’ – перевод строки;

‘\t’ – горизонтальная табуляция;

‘\r’ – возврат каретки к началу строки;

‘\\’ – обратная косая черта \;

‘\’’– апостроф;

‘\”’ – кавычка;

‘\0’ – нулевой символ;

‘\a’ – сигнал-звонок;

‘\ddd’ – восьмеричное представление любой символьной константы;

‘\xhhh’ – шестнадцатеричное представление любой символьной константы.

Все символьные константы имеют значение целого типа, совпадающие с кодом символа в кодировке ASCII.

Для символьных данных веден базовый тип char. Описание символьных переменных имеет вид:

сhar список_имен_переменных

Для ввода и вывода символьных данных в форматных строках библиотечных функций printf(), scanf() используется спецификация преобразования %c.

Кроме функций printf(), scanf() для ввода и вывода символов предусмотрены специальные функции обмена:

getchar() – чтение одного сивола из входного потока;

putchar(X) – вывод символьного значения Х в стандартный выходной поток.

Пример использования символьных констант:

#include<stdio.h>

void main (){

char a=’A’, b=’*’,c=’\a’,d=’\07’, e=’\x07’;

printf(“a=%c b=%c c=%c d=%c e=%c”,a,b,c,d,e);}

Строковая константа определяется как последовательность символов, заключенных в двойные кавычки, например: “Строка”. Среди символов могут быть эскейп-последовательности, т. е. сочетания знаков, соответствующие неизображаемым символам, или символам, задаваемым их внутренними кодами. Например: “\nСтрока с использованием управляющих кодов. \n”.

Все символы строки размещаются в памяти подряд, и каждый символ (в том числе представленный эскейп-последовательностями) занимает ровно один байт. В конце записи строковой константы компилятор помещает символ ‘\0’.

Строка – это массив символов, т. е. она всегда имеет тип char[]. Количество элементов в таком массиве на один больше, чем в изображении соответствующей строковой константы.

Присвоить значение массиву символов с помощью обычного оператора присваивания нельзя. Поместить строку в массив можно при инициализации.

Таким образом, описание строки может быть выполнено одним из следующих способов:

char string1[50]; – где 50 – максимальное допустимое количество символов в строке.

char string2[]={‘С’, ‘т’, ‘р’, ‘о’, ‘к’, ‘а’, ‘1’, ‘.’, ‘\0’}; – помещение строки в массив при инициализации.

char string3[] =”Еще один пример строки, описанной при инициализации”;

Кроме перечисленных способов поместить строку в массив можно с помощью функций ввода. В функциях printf(), scanf() для символьных строк используется спецификация преобразования %s.

char str[]=”String one”;

printf(“%s”,str);

Работа с символьными строками – это работа с массивами типа char. При этом следует помнить об обязательном присутствии в конце строки символа ‘\0’.

Кроме описанных выше, существует еще один способ описания строковых констант. Такой способ возможен только для массивов символов и выглядит следующим образом:

char *str;

char *str1=”Строка, описанная при помощи указателя.”;

Использование указателей, а не массивов фиксированной длины целесообразно, когда предложения или слова должны быть разной длины.

Пример:

#include<stdio.h>

void main (){

char *str[] ={“Обработка”, “предложений”, “или”, “слов”, “каждое”, “из”, “которых”, “представлено”, “в”, “виде”, “строки”, “.”};

int i,n;

n=sizeof(str)/sizeof(str[0]);

for (i=0;i<n;i++)

printf(“%s”,str[i]);}

Вопросы:

1.Понятие символьных данных и строк.

2.Способы задания строки.

3.Инициализация строк.

4.Ввод/вывод символьных данных.

5.Строки и указатели.

6.Эскейп-последовательности.

Задание на выполнение:

1. Определить долю пробелов в заданной строке.

2. Удалить из заданного слова все буквы “а”.

3. Определить количество предложений в заданном тексте (предложение заканчивается либо точкой, либо вопросительным или восклицательным знаком).

4. Для каждого из слов заданного предложения указать, сколько раз оно встречается в предложении.

5. Из заданного предложения удалить слова, которые встречались в нем раньше.

6. Отредактировать заданное предложение, удаляя из него слова с четными номерами.

7. Найти самое длинное и самое короткое слово в заданном предложении.

8. В заданной последовательности слов найти все слова, имеющие заданное окончание.

9. В заданной последовательности слов найти все слова, начинающиеся с заданной приставки.

10. В заданном предложении указать слово, для которого доля гласных максимальна.

11. В заданную упорядоченную в лексикографическом (алфавитном) порядке последовательность слов вставить новое заданное слово так, чтобы лексикографический порядок сохранился.

12. Дан текст из цифр и строчных латинских букв. Определить, каких букв – гласных или согласных – больше в тексте.

13. Проверить, является ли заданное слово названием времени года на русском языке.

14. Дана последовательность слов, в которых слова разделены запятыми, а за последним словом – точка. Напечатать эту же последовательность слов в обратном порядке. Указать для всех различных слов число вхождений в последовательность.

15. Из заданного текста выбрать и напечатать те символы, которые встречаются в нем ровно один раз (в том порядке, как они встречаются в тексте).

ЛАБОРАТОРНАЯ РАБОТА №7

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