Будь умным!


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

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

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

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 9.11.2024

Лекция 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. Особенности анестезии в урологии
2. Трудности перевода гендерных метафор
3.  Линейная алгебра Понятие матрицы типы матриц Операции с матрицами сложение умножение на число у
4. Introduction - Le tke off est une notion reltive comme le montre l~exemple frn~is et nglis
5. Курсовая работа- Расчет охладителя конденсата пара
6. Символ благополучия - мирт
7. был человек который в детстве слышал прекрасную повесть о том как Господь испытывал Авраама и как Авраам вы
8. Сертифікація іграшок
9. одна из самых первых транснациональных корпораций в мире
10. Законы Хаммурапи
11. Тема- Практика сотрудничества семьи и современного детского сада
12. а суетливы и неусидчивы; б жизнерадостны и веселы; в хладнокровны и спокойны; г застенчивы и стесни
13. Пояснительная записка к рабочей программе по немецкому языку для 10 класса
14. Налог на прибыль организаций исчисляется для конкретного налогового периода; налогом облагается пр
15. Тема 1. Предмет задачи и организация оказания первой помощи
16. Розробка стабілізатора напруги на базі інформаційних технологій схемотехнічного проектування
17. как научиться чрезвычайно мало внимания отведено тому как сделать процесс обучения максимально гибким
18. Охрана труда при проведении учебной практики
19. На тему- Разработка бизнесплана на примере компьютерного клуба Виктория Студентки III курса заочной
20.  Наименование компании проекта 2