Хелпикс

Главная

Контакты

Случайная статья





Код символа – целое число. Занимает в памяти 1 байт. Коды всех символов сведены в кодовую таблицу, имеющую 16 строк и 16 столбцов, пронуменрованных 16-ричными цифрами: 0, 1, …, 9, A, B, C, D, E, F.. Т.о., кодовая таблица хранит коды 256 символов. Из кодов



 

1. Строки и символы

 

1.1 Работа с символами

 

Для хранения отдельных символов используются переменные типа char.

Пример описания: Char t, p; // Описаны 2 перенные символьного типа.

Возможными значениями символьной переменной могут быть различные символы. Такими символами могут быть почти все знаки из кодовой таблицы ПК за исключением специальных управляющих знаков, не имеющих графического изображения. Например, можно записать присваивания: t='Q'; p='p'; Здесь t и p – переменные, которые могут принимать разные значения, а 'Q' и 'p' – конкретные значения, присваиваимые этим переменным. После этого в ячейке памяти, которая зарезервирована для переменной t, будет записан код символа 'Q', а для переменной p– код символа 'p'. Переменная p и значение 'p' – это не одно и то же!

Код символа – целое число. Занимает в памяти 1 байт. Коды всех символов сведены в кодовую таблицу, имеющую 16 строк и 16 столбцов, пронуменрованных 16-ричными цифрами: 0, 1, …, 9, A, B, C, D, E, F.. Т.о., кодовая таблица хранит коды 256 символов. Из кодовой таблицы можно определить код символа в 16-ричной системе счисления – это последовательность 16-ричных цифр, составленная из номера столбца и номера строки. Например, символ, стоящий на пересечении столбца 9 и строки F, имеет 16-ричный код 9F16. Можно перевести код в 10-тичную систему счисления: 9F16=9*16+15=15910.

Существуют специальные программы вывода таблицы кодов символов на экран и вставки символов в текст программы. Например, ascii.com.

Хотя в языке Си можно одновременно использовать переменные типов int и char, все же отметим, что если объявлено int a; char b; и назначено a=5;b='5';, то a и b - это не одно и то же: переменная a имеет числовое значение 5, а b – значение символа '5'. Число 5 в двоичном коде равно 101, а двоичный код символа '5' есть 110101 (1101012= 3516=5310).

 

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

Текст программы

/* Вывод символьной переменной в различных формах*/

#include<stdio.h>

#include<conio.h>

main()

{

char b;                                //Обявление символьной переменной

puts("Введите один символ");

b=getchar();                           //Ввод значения переменной b

printf("\tb=");

putchar(b);                               //Вывод значения переменной b

printf("\nДесятичный код b=%d\n",b);       //Вывод десятичного кода b

printf("\tВосьмеричный код b=%o\n",b);     //Вывод восьмеричного кода b

printf("\t\tШестнадцатеричный код b=%X\n",b);

printf("b='%c'\n",b);

getch();

}

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

 

Введите один символ

*

   b=*

Десятичный код b=42

   Восьмеричный код b=52

           Шестнадцатеричный код b=2A

b='*'

 

Введите один символ

{

   b={

Десятичный код b=123

   Восьмеричный код b=173

           Шестнадцатеричный код b=7B

b='{'

Введите один символ

#

   b=#

Десятичный код b=35

   Восьмеричный код b=43

           Шестнадцатеричный код b=23

b='#'

 

 

Введите один символ

   b=5

Десятичный код b=53

   Восьмеричный код b=65

           Шестнадцатеричный код b=35

b='5'

В библиотеке ctype определен целый ряд функций, проверяющих принадлежность символа какому-либо множеству: множеству букв (isalpha), букв или цифр (isalnum), разделителей (isspase), знаков пунктуации (ispunct), цифр (isdigit), видимых символов (isgraph), букв верхнего регистра (isuper), букв нижнего регистра (islower), печатаемых символов (isprint) и т.д.

Аргументом каждой из этих функций является символ. Функция возвращает значение true,если символ принадлежит конкретному множеству символов, или false в противном случае.

 

Пример. Ввести символ с клавиатуры и проверить, является ли он знаком пунктуации (. , ! ? : ; ).

Текст программы

#include<stdio.h>

#include<ctype.h>

#include<conio.h>

void main()

{

char a;

puts("Введите один символ");

a=getchar();

if(ispunct(a))

  printf("Символ %c явл. знаком пунктуации\n",a);

else 

printf("Символ %c не явл. знаком пунктуации\n",a);

getch();

}

Результаты выполнений программы

 

Введите один символ

.

Символ . явл. знаком пунктуации

Введите один символ

^

Символ ^ явл. знаком пунктуации

Введите один символ

e

Символ e не явл. знаком пунктуации

Введите один символ

#

Символ # явл. знаком пунктуации

Введите один символ

[

Символ [ явл. знаком пунктуации

Введите один символ

-

Символ - явл. знаком пунктуации

Введите один символ

n

Символ n не явл. знаком пунктуации

 

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

 

#include<stdio.h>

void main()

{

char c,c1;

 c='A';

c1=65;

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

printf("%i %c\n",c1,c1);

 if(c1=='A' && c== 65)

 puts("Обе A");

else puts("****");

}

 

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

A 65

65 A

Обе A

 

Пример использования функции char из библиотеки ctype

#include<stdio.h>

#include<conio.h>

#include<ctype.h>

void main()

{

int cod;

char S;

puts("Ввeдите 1 символ");

S=getchar();

cod=char(S);

putchar(S);

printf("\t\n");

printf("%c %d %d\n",S,S,cod);

getch();

}

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

Ввeдите 1 символ

2 50 50

Ввeдите 1 символ

%

%

% 37 37

Ввeдите 1 символ

D

D

D 68 68

1.2  Понятие и описание строки

 

В языке Си отсутствует специальный строковый тип. Строка в Си – это массив символов. В памяти ЭВМ строка представляется как массив элементов типа char, в конце которого помещается символ '\0' - завершающий нуль-символ. Это не цифра 0, а символ, у которого в кодовой таблице все нули (т.е. 00000000).

Строковая константа – это последовательность символов, заключенная в кавычки ("). Например, " Задача имеет множество решений". В памяти представляется как массив элементов типа char с завершающим нуль-символом ('\0').

Общий вид описания строки:

 

1. Char <имя строки>[<длина строки с учетом нуль-символа>];

Например, Char S[100];

Или             const int N=100; Char S[N]; //Удобно задавать длину строки с помощью                                                                                           // именованной константы

В такой строке можно хранить 99 символов и завершающий нуль-символ.

2.  При описании строки можно выполнять ее инициализацию. Например,

 Char S1[100]= "Исходный массив";

При этом нуль-символ автоматически формируется за последним символом символьной константы.

Если строка при описании иницализируется, то можно опускать длину строки. Например,

Char S1[]= "Исходный массив"; //16 символов

Примечание. Имя строки, как и любого массива – это указатель-константа. Поэтому ошибкой будет попытка использовать имя строки в некоторых операциях адресной арифметики. Например, нельзя выполнить такую "пересылку" строки символов в массив:

Char a[20];                              //Так

a="Строковая константа";   //нельзя

3. Описание динамической строки

Для размещения строки в динамической памяти, необходимо описать указатель на Char, а затем выделить память с помощью new или malloc (new предплчтительнее).

Например,

Char *S3=new char[m]; //m должно быть уже определено

Или



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.