Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Лекция 6 Последовательная обработка символьных данных Символьные данные Значением символьного ти

Работа добавлена на сайт samzan.net:


Лекция 6. Последовательная обработка символьных данных

Символьные данные

Значением символьного типа является одиночный символ. В языке C символьные данные рассматриваются как разновидность целых чисел. Числовым значением символа является его код.

В языке C над символами разрешаются не только операции присваивания и сравнения, но и арифметические операции.

В международном стандарте кодов ASCII каждый символ занимает один байт, этого достаточно для кодирования 256 различных кодов. Есть кодировки, в которых символ занимает два байта, например, международный код UNICODE.

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

  ‘*’   ‘a’  ‘5’  ‘n’

Специальные (управляющие) символьные константы:

'\n'   новая строка (new line),

'\t'  '\v'   табуляция горизонтальная, вертикальная,

'\b'   возврат на шаг (backspace),

'\\'   -  \ (обратный слэш)

'\''  -   ' (апостроф)

'\"'   -  "   (кавычка),

'\0'   нуль-символ (байт с нулевым кодом).

 

При объявлении символьных переменных обычно используется тип  char, но можно  использовать и тип int.  Например:

char    s,  sim = ‘Z’,   c;

int   b = ‘a’;

Кодировка цифровых символов (символ и его числовой код):

'0' =   48

'1' = '0' + 1 = 49

'2' = '0' + 2 = 50

. . .

'9' = '0' + 9 = 57

Отсюда соотношения:

Код цифры = '0' + Значение цифры

Значение цифры = Код цифры - '0'

Условие "значение символьной переменой s является цифрой" на языке C запишется так:

s >= '0' && s <= '9‘

Коды заглавных латинских букв возрастают по алфавиту:

'A'  = 65,  'B' = 66,  'С' = 67,  …

'A' < 'B' < ... < 'Z' .

Коды строчных латинских букв также составляют возрастающую последовательность:   'a'  = 97,  'b' = 98, 'с' = 99,  …

'a' < 'b' < ... < 'z'.

Условие "значение символьной переменой s является латинской буквой" можно записать так:

(s>='A' && s<='Z') || (s>='a' && s<='z')

Русские буквы (символы кириллицы) имеются не во всех кодировках и не всегда кодируются по алфавиту.

Последовательная обработка символов

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

Функции  getchar( )  и   putchar( )

Функции getchar() и putchar() служат соответственно для ввода и вывода одного символа.  Для посимвольного ввода/вывода текстов лучше    использовать эти функции, нежели scanf() и printf().

Функция getchar() не имеет аpгументов.  Она читает очередной введенный символ и  возвpащает его код  выполняемой пpогpамме.

Пpимеp вызова функции getchar():

           char ch;

           ch = getchar();

Как и функция scanf(),  функция getchar() читает данные  из буфера ввода-вывода. В буфер данные помещаются построчно. То есть пока не будет введена вся строка, функция getchar() не начнет чтение символа.

Функция putchar() имеет один аpгумент - это символ, который требуется вывести на экран.

Пpимеpы вызова функции putchar():

           putchar (ch);     /* ch - переменная типа char */

           putchar ('S');

           putchar ('\n');    /* перевод строки */

Определения  функций  getchar()  и  putchar()  содержатся  в файле   stdio.h.

Задача 1. Вывести коды введенных с клавиатуры символов. Последовательность символов завершается нажатием клавиши Enter.

/*   Коды символов */

#include <stdio.h>

#include <conio.h>

main()

{ char sim;   /*  очередной символ  */

 printf("\n Введите строку символов\n");

 while((sim=getchar()) != '\n')

       printf("%c = %d,  ", sim, sim);

 printf("\nНажмите любую клавишу");

getch();     /* чтение кода нажатой клавиши без отображения символа

   на экране*/

  return 0;

}

Оператор while  в программе можно записать иначе – с использованием функции putchar():

 while((sim=getchar()) != '\n')

   {    putchar(sim);

      printf(" = %d,  ", sim);

}

Пример результата выполнения программы:

Введите строку символов

Kazan 2009   

K = 82, a = 97, z = 122, a = 97, n = 110,   = 32, 2 = 50, 0 = 48, 0 = 48, 9 = 57,

Нажмите любую клавишу

Задача 2. Дан текст произвольной длины, оканчивающийся точкой.    Проверить, есть ли в тексте сочетания "ВА".

Программа:

    #include <stdio.h>

    main()

    {

       char  s;                /* текущий символ текста */

       char  prs;            /* предыдущий символ     */

       short net=1;        /* признак, имеется ли "ВА" в тексте */

                                  /* net=1, если "ВА" нет              */

                                  /* net=0, если "ВА" есть             */

       printf  ("\nВведите текст.\n");

       s=getchar();        /* чтение первого символа */

       if (s!='.')

       {  do

           {   prs=s; s=getchar();

                if  (prs=='В' && s=='А')   net=0;

           }

            while (s!='.');

       }

       if (net)  printf ("В тексте нет 'ВА'.\n");

       else printf ("В тексте есть 'ВА'.\n");

       return 0;

    }

Тесты для проверки программы

Номер теста

Исходный текст

Ожидаемый результат

    1

    2

    3

МОСКВА, БЕРЛИН, ВАРНА .

Школа .

.  

В тексте есть 'ВА'.

В тексте нет 'ВА'.

В тексте нет 'ВА'.

Контрольные вопросы и упражнения

1. Как объявить символьные переменные? Запишите примеры.

2. Как выполнить ввод и  вывод символьной переменной t?

3. Запишите условный оператор для проверки, является ли символ s строчной латинской буквой, и вывода соответствующего сообщения.

4. Как проверить, является ли символ   s    цифрой?

5. Определите результат выполнения следующего фрагмента программы:

char  b;

for (b = 'A';  b <= 'Z';  b++)

printf ("%c - %d\n", b, b);

Выполнение контрольных заданий

             

1. Получите у преподавателя индивидуальное задание.

2. Составьте блок-схему и программу на языке С и подберите тесты для проверки программы на компьютере.

3. Отладьте программу на компьютере.

5. Оформите и сдайте отчет.

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

1. Дан текст произвольной длины, оканчивающийся точкой с запятой. Подсчитать количество цифр в тексте.

2. Дана  последовательность  символов  и количество символов в   этой последовательности.  Проверить,  есть ли в  тексте  латинские   буквы.

3. Дан текст произвольной длины,  оканчивающийся символом ";".    Проверить, есть ли в тексте скобки.

4. Дан текст заданной длины.  Подсчитать количество  сочетаний   ":=".

5. Дан текст произвольной длины,  оканчивающийся точкой. Текст    состоит из слов, разделенных пробелами. Подсчитать

а) количество слов в тексте;

б) количество слов, начинающихся с буквы  К;

в) количество слов, заканчивающихся буквой  А.

6. Дано скобочное выражение,  оканчивающееся точкой с запятой.

а) Проверить правильность расстановки скобок в выражении.

б) Подсчитать количество уровней вложенности скобок в выражении.

7. Дана строка символов. Признак конца - символ '\n' ( перевод  строки).

а) Вывести символы строки без лишних пробелов, т.е. если подряд следует несколько   пробелов, оставить только один.

б) Удалить последовательности символов, заключенные в фигурные   скобки.

в) Вывести последовательности символов, заключенные в скобки. Каждую такую последовательность выводить с новой строки.

г)   Проверить, есть ли одинаковые соседние символы.

д) Определить наибольшее число подряд идущих одинаковых символов.

е)   Определить, каких символов больше: цифр или латинских букв.

61




1. речь для себя эгоцентрическя речь и только потом под давлением взрослых социализированная речь для.html
2. Особенности тактики допроса при расследовании преступлений совершаемых организованными престу
3. Острого живота.html
4. Реферат- Маркетинг в период финасового оздоровления
5. Маршрутами старой Москвы
6. дает доступ к новым технологиям дешевым факторам производства
7. Психология для жизни КАК ВЫРАСТИТЬ РЕБЕНКА СЧАСТЛИВЫМ Принцип преемственности Жан Ледлофф
8. а о которых заявлено в орган по рассмотрению индивидуальных трудовых споров ~ ст
9. .И.О. Группа ТЕСТ
10. тематические методы сравнения сопоставления вычленения пытаются найти полезное и помочь расшифровать что
11. МЕТОДИЧЕСКИЕ рекомендации ПО ПОДГОТОВКЕ И ОФОРМЛЕНИЮ РЕФЕРАТА ДЛЯ СТУДЕНТОВ ВСЕХ СПЕЦИАЛЬНОСТЕЙ
12. Тема 4 Маркетинговые исследования ~ 8 ч
13. локализовать психику в природе
14. продажа жилых помещений Очевидно что купляпродажа жилого помещения не сводится к передаче из рук в руки
15. В отличие от чистой информации реклама использует средства убеждения цель ее обеспечение предпочтения в
16. Тема- Педагогика как наука Подготовил студент ТО13-2 Минишева Анастасия В
17. Первые шаги советской физической культуры 1917-1941 гг
18. Тема 7 Робота з системою 1С- підприємство 7
19.  Введение Часть 2
20. 1212 посвящается Путь женщины с Богом ~ 94 года от начала 20 века до начала 21 века от раннего сиротст