Презентация на тему: Символы и строки в С

Символы и строки в С
История
Н есколько кодовых таблиц, представляющих кириллицу:
Символьный тип
Символы и строки в С
Обработка символов
Символы и строки в С
Имеется ряд кодов так называемых неотображаемых символов, которым соответствуют определенные действия при вводе-выводе.
Функции чтения и вывода символов
Символы и строки в С
Строка
Объявление и инициализация строк.
Символы и строки в С
Работа со строками в С
Символы и строки в С
Функции для работы со строками в С
Ввод и вывод строк в С
Недостатком функции scanf при вводе строковых данных является то, что символами разделителями данной функции являются:
Для ввода и вывода строк в библиотеке stdio.h содержатся специализированные функции
Функция puts
Преобразование строк
Обработка строк
Обработка строк
Подсчитать число звездочек в строке
Вывести номер каждой звездочки в строке
Получить фрагмент строки с 3 по 6 символы включительно
Посчитать количество запятых, после которых не стоит пробел
Вывести на экран длину каждого слова в предложении
Вывести букву каждого слова
Вставить в середину строки звездочку
Удалить 5-й символ строки
Проверить, состоит ли строка только из звездочек
1/32
Средняя оценка: 4.6/5 (всего оценок: 50)
Код скопирован в буфер обмена
Скачать (269 Кб)
1

Первый слайд презентации: Символы и строки в С

Изображение слайда
2

Слайд 2: История

Символы и строки в Си реализованы в соответствии со сложившимися в 70-годы прошлого века стандартами представления текста. Тогдашний уровень технологии привел к тому, что в качестве единицы представления символа был выбран байт, информационная емкость которого равно 28=256. Это означает, что одновременно в программе можно представить не более 256 различных символов. Этого хватает для стандартного набора символов и букв латинского алфавита. Для прочих символов (кириллица, национальные алфавиты, псевдо-графика, математические) используются различные кодовые таблицы, работа с которыми не включена в стандарты языка (т.е. попросту не оговаривается в нем).

Изображение слайда
3

Слайд 3: Н есколько кодовых таблиц, представляющих кириллицу:

Windows  CP-1251 ; DOS  CP-866 ; кодовая таблица Международной организации стандартизации ( ISO ), используемая семействами мобильных ОС UNIX,  Linux,  FreeBSD  и т.п. -  ISO-8859-5 ; кодовые таблицы «советских» стандартов  кодов информационного обмена ( KOI-8)  -  CP KOI-8U  и   CP KOI-8R. ASCII

Изображение слайда
4

Слайд 4: Символьный тип

Базовый тип данных   char  понимается трояко: как байт - минимальная адресуемая единица представления данных в компьютере как целое со знаком (в диапазоне –127…+127) как   символ   текста. Стандартом установлено соответствие между символами и присвоенными им значениями целой переменной ( кодами ). Любое устройство, отображающее символьные данные, при получении кода выводит соответствующий ему символ. Аналогично клавиатура (совместно с драйвером) кодирует нажатие любой клавиши с учетом регистровых и управляющих клавиш в соответствующий ей код.

Изображение слайда
5

Слайд 5

Изображение слайда
6

Слайд 6: Обработка символов

Числовая и символьная интерпретация типа данных  char   позволяются использовать обычные операции для работы с целыми числами для обработки символов текста. Тип данных  char  не имеет никаких ограничений на выполнение операций, допустимых для целых переменных: от операций сравнения и присваивания до арифметических операций и операций с отдельными разрядами. Но за исключением редких случаев знание кодов символов не требуется. Для представления отдельных символов можно пользоваться символьными (литерными) константами. Транслятор вместо такой константы всегда подставляет код соответствующего символа

Изображение слайда
7

Слайд 7

#include < stdio.h > void main() { char c; for (c= 'A'; c <= 'Z'; c++ ) putchar (c); }

Изображение слайда
8

Слайд 8: Имеется ряд кодов так называемых неотображаемых символов, которым соответствуют определенные действия при вводе-выводе

Константа Действие \a Звуковой сигнал \b Курсор на одну позицию назад \f Переход к началу \n Перевод строки \r Возврат на первую позицию строки \t Табуляция \v Вертикальная табуляция по строкам \ nn Символ с восьмеричным кодом \ xnn Символ с шестнадцатеричным кодом \0 Символ с кодом 0

Изображение слайда
9

Слайд 9: Функции чтения и вывода символов

getchar () – запрос символа с клавиатуры putchar (c) – вывод символа на консоль На самом деле символы помещаются в буфер. И берутся из буфера. Getchar () считывает не только введенный символ, но и Enter, который является командой вывода из буфера на экран. До нажатия Enter символы помещаются в буфер. Чтобы учесть этот Enter, нужно ставить еще одну команду getchar ()

Изображение слайда
10

Слайд 10

#include < stdio.h > void main() { char c='0'; int a,b,r ; while (c!='y') { srand (time(0)); a=rand()%10; b=rand()%10; printf (" чему равен результат % d*% d\n", a,b ); scanf ("% d",&r ); if (r==a*b) printf (“ Верно \n”); else printf ( “ Не правильно \n”); getchar (); printf (" Закончить? y"); c= getchar (); } } Программа тестирования на знание таблицы умножения. Выход из программы – ввод « y » по запросу

Изображение слайда
11

Слайд 11: Строка

Строкой называется последовательность символов, ограниченная символом с кодом 0, то есть '\0'. Местом хранения строки является массив символов. Символьный массив Символьная строка

Изображение слайда
12

Слайд 12: Объявление и инициализация строк

char имя[длина ]; Объявление  строки в С  имеет тот же синтаксис, что и объявление одномерного символьного массива. Длина строки должна представлять собой целочисленное значение. Длина строки указывается с учетом одного символа на хранение завершающего нуля, поэтому максимальное количество значащих символов в строке на единицу меньше ее длины.

Изображение слайда
13

Слайд 13

Например, строка может содержать максимально двадцать символов, если объявлена следующим образом: char str [21]; Инициализация строки в С осуществляется при ее объявлении, используя следующий синтаксис: char str [длина] = строковый литерал; Строковый литерал – строка ASCII символов заключенных в двойные кавычки. char str1[20] = " Привет"

Изображение слайда
14

Слайд 14: Работа со строками в С

Так как строки на языке С являются массивами символов, то к любому символу строки можно обратиться по его индексу. Для этого используется синтаксис обращения к элементу массива, поэтому первый символ в строке имеет индекс ноль. Например, в следующем фрагменте программы в строке str осуществляется замена всех символов 'a' на символы 'A' и наоборот.

Изображение слайда
15

Слайд 15

Заменить букву «а» на «А» и наоборот, «А» на «а» # include < stdio.h > void main() { char str []="a ghA kgaA "; for( int i = 0 ; str [ i ] != 0; i ++) { if ( str [ i ] == 'a') str [ i ] = 'A'; else if ( str [ i ] == 'A') str [ i ] = 'a'; } puts( str ); }

Изображение слайда
16

Слайд 16: Функции для работы со строками в С

Все библиотечные функции, предназначенные для работы со строками, можно разделить на три группы: ввод и вывод строк; преобразование строк; обработка строк. Для корректной работы следует подключить библиотеку string.h #include < string.h >

Изображение слайда
17

Слайд 17: Ввод и вывод строк в С

Для ввода и вывода строковой информации можно использовать функции форматированного ввода и вывода ( printf и scanf ). Для этого в строке формата при вводе или выводе строковой переменной необходимо указать спецификатор типа %s. Например, ввод и последующий вывод строковой переменной будет иметь вид: char str [31] = ""; printf (" Введите строку: "); scanf ("%30s”,str); printf (" Вы ввели: % s”, str );

Изображение слайда
18

Слайд 18: Недостатком функции scanf при вводе строковых данных является то, что символами разделителями данной функции являются:

перевод строки, табуляция; пробел. Поэтому, используя данную функцию невозможно ввести строку, содержащую несколько слов, разделенных пробелами или табуляциями. Например, если в предыдущей программе пользователь введет строку: "Сообщение из нескольких слов", то на экране будет выведено только "Сообщение".

Изображение слайда
19

Слайд 19: Для ввода и вывода строк в библиотеке stdio.h содержатся специализированные функции

Функция gets предназначена для ввода строк и имеет следующий заголовок: char * gets ( char * buffer ); Между тем использовать функцию gets категорически не рекомендуется, ввиду того, что она не контролирует выход за границу строки, что может произвести к ошибкам. Вместо нее используется функция fgets с тремя параметрами: char * fgets ( char * buffer, int size, FILE * stream ); где buffer - строка для записи результата size - максимальное количество байт, которое запишет функция fgets stream - файловый объект для чтения данных, для чтения с клавиатуры нужно указать stdin. Эта функция читает символы со стандартного ввода, пока не считает n - 1 символ или символ конца строки, потом запишет считанные символы в строку и добавит нулевой символ. При этом функция fgets записывает в том символ конца строки в данную строку, что нужно учитывать.

Изображение слайда
20

Слайд 20: Функция puts

предназначена для вывода строк и имеет следующий заголовок: int puts( const char [] string ); Простейшая программа: ввод и вывод строки с использованием функций fgets и puts будет иметь вид: char str [102] = ""; printf (" Введите строку: "); fgets ( str, 102, stdin ); printf (" Вы ввели: "); puts( str );

Изображение слайда
21

Слайд 21: Преобразование строк

atof ( const char *string); // преобразование строки в число типа double atoi ( const char *string); // преобразование строки в число типа int atol ( const char *string); // преобразование строки в число типа long int atoll( const char *string); // преобразование строки в число типа long long int

Изображение слайда
22

Слайд 22: Обработка строк

strlen ( const char string[]); //длина строки str с py (char s1[], char s2[]);// копирует строку s2 в строку s1, включая '\0', возвращает s1 strncpy (char s1[], char s2[], int n);// копирует не более n символов строки s2 в строку s1, возвращает s1; strncmp (char s1[], char s2[] ) ;// сравнивает s1 и s2, возвращает значение 0, если строки эквивалентны strncmp ( char s1[], char s2[], int n) ;// сравнивает не более n символов строк s1 и s2, возвращает значение 0, если начальные n символов строк эквивалентны strset ( char s [], char c) ;// заполняет строку s символами, код которых равен значению c strnset ( char s [], char c, int n) ;// заменяет первые n символов строки s символами, код которых равен c

Изображение слайда
23

Слайд 23: Обработка строк

strcat (char dst [], char src []);// добавляет строку src к строке dst strncat (char dst [], char src [], size_t num ); //добавляет n символов строки src к строке dst strchr (char string[], int symbol );// поиск первого вхождения символы symbol в строке string strcspn ( const char * string1, const char * string2 ); //выполняет поиск первого вхождения в строку string1 любого из символов строки string2, и возвращает количество символов до найденного первого вхождения.

Изображение слайда
24

Слайд 24: Подсчитать число звездочек в строке

void main() { char str [100] = ""; int n=0; printf (" Введите строку: "); fgets ( str, 100, stdin ); for ( int i =0;i< strlen ( str ); i ++) { if ( str [ i ]=='*') n++; } printf ("%d\ n",n ); printf ("%d", strlen ( str )); }

Изображение слайда
25

Слайд 25: Вывести номер каждой звездочки в строке

#include < stdio.h > #include < string.h > void main() { char str [100] = ""; int n=0; printf (" Введите строку: "); fgets ( str, 100, stdin ); for ( int i =0;i< strlen ( str ); i ++) { if ( str [ i ]=='*') { printf ("%d\n", i ); } } }

Изображение слайда
26

Слайд 26: Получить фрагмент строки с 3 по 6 символы включительно

void main() { char str [100] = ""; char s[100]=""; int j=0; printf (" Введите строку: "); fgets ( str, 100, stdin ); for ( int i =3;i<6;i++) { s[j]= str [ i ]; j++ ; } puts(s); }

Изображение слайда
27

Слайд 27: Посчитать количество запятых, после которых не стоит пробел

#include < stdio.h > #include < string.h > void main() { char str [100] = ""; int n=0; printf (" Введите строку: "); fgets ( str, 100, stdin ); for ( int i =0;i< strlen ( str ); i ++) { if ( str [ i ]==',' && str [i+1]!=' ') n++; } printf ("%d\ n",n ); printf ("%d", strlen ( str )); }

Изображение слайда
28

Слайд 28: Вывести на экран длину каждого слова в предложении

#include < stdio.h > #include < string.h > void main() { char str [100] = ""; int n=0; printf (" Введите строку: "); fgets ( str, 100, stdin ); for ( int i =0;i< strlen ( str ); i ++) { if ( str [ i ]==' ') { printf ("%d\ n",n ); n=0; } else { n++; } } printf ("%d\n",n-1); }

Изображение слайда
29

Слайд 29: Вывести букву каждого слова

#include < stdio.h > #include < string.h > void main() { char str [100] = ""; int n=0; printf (" Введите строку: "); fgets ( str, 100, stdin ); putchar ( str [0]); printf ("\n"); for ( int i =0;i< strlen ( str ); i ++) { if ( str [ i ]==' ') { putchar ( str [i+1]); printf ("\n"); } } }

Изображение слайда
30

Слайд 30: Вставить в середину строки звездочку

#include < stdio.h > #include < string.h > void main() { char str [100] = ""; char endStr [101] = ""; int n=0,j=0; printf (" Введите строку: "); fgets ( str, 100, stdin ); // поиск середнины строки n=( int ) ( strlen ( str )/2); // копирование первой части строки (до середины) в другую строку strncpy ( endStr,str,n ); // добавление звездочки endStr [n]='*'; // цикл копирования остатка исходной строки в новую строку for( int i = n;i < strlen ( str ); i ++) { endStr [i+1]= str [ i ]; } puts( endStr ); }

Изображение слайда
31

Слайд 31: Удалить 5-й символ строки

#include < stdio.h > #include < string.h > void main() { char str [100] = ""; char endStr [101] = ""; int n=4,j=0; printf (" Введите строку: "); fgets ( str, 100, stdin ); // копирование первой части строки (до середины) в другую строку strncpy ( endStr,str,n ); // цикл копирования остатка исходной строки в новую строку for( int i =n+1;i< strlen ( str ); i ++) { endStr [i-1]= str [ i ]; } puts( endStr ); }

Изображение слайда
32

Последний слайд презентации: Символы и строки в С: Проверить, состоит ли строка только из звездочек

#include < stdio.h > #include < string.h > void main() { char str [100] = ""; int flag=1; printf (" Введите строку: "); fgets ( str, 100, stdin ); for( int i =0;i< strlen ( str )-1;i++) { if ( str [ i ]!='*') { printf (" нет\ n"); flag=0; break; } } if (flag==1) printf (" Да\ n"); }

Изображение слайда