Строки. Лекция 11

Содержание

Слайд 2

Работа с символами в Си: char, ASCII, ASCIIZ, функции isX

Работа с символами в Си: char, ASCII, ASCIIZ, функции isX

Слайд 3

Тип char char – это «очень короткий» целый тип #include void

Тип char

char – это «очень короткий» целый тип
#include
void main() {
char

ch = 32;
while (ch < 127) {
printf("%d ", ch);
ch++;
}
}
Слайд 4

Тип char (2) char – это символьный тип #include void main()

Тип char (2)

char – это символьный тип
#include
void main() {
char ch

= 32;
while (ch < 127) {
printf("%c ", ch);
ch++;
}
}
Слайд 5

Тип char (3) unsigned char = [0 .. 255] #include void

Тип char (3)

unsigned char = [0 .. 255]
#include
void main() {
unsigned

char ch = 0;
while (ch < 255) {
printf("%c ", ch);
ch++;
}
}
Слайд 6

Тип char (4) signed char = [-128 .. +127] #include void

Тип char (4)

signed char = [-128 .. +127]
#include
void main() {
signed

char ch = -128;
while (ch < 127) {
printf("%c ", ch);
ch++;
}
}
Слайд 7

Тип char (5) Загадка: Тип char == signed char ИЛИ Тип char == unsigned char ?

Тип char (5)

Загадка:
Тип char == signed char
ИЛИ
Тип char == unsigned

char
?
Слайд 8

Тип char (6) http://stackoverflow.com/questions/2054939/is-char-signed-or-unsigned-by-default The standard does not specify if plain char is signed or unsigned…

Тип char (6)

http://stackoverflow.com/questions/2054939/is-char-signed-or-unsigned-by-default
The standard does not specify if plain char is

signed or unsigned…
Слайд 9

ASCII https://ru.wikipedia.org/wiki/ASCII ASCII (англ. American standard code for information interchange) —

ASCII

https://ru.wikipedia.org/wiki/ASCII
ASCII (англ. American standard code for information interchange) — название таблицы (кодировки, набора),

в которой некоторым распространённым печатным и непечатным символам сопоставлены числовые коды. Таблица была разработана и стандартизована в США в 1963 году.
Слайд 10

ASCIIZ http://stackoverflow.com/questions/7783044/whats-the-difference-between-asciiz-vs-ascii In computing, a C string is a character sequence

ASCIIZ

http://stackoverflow.com/questions/7783044/whats-the-difference-between-asciiz-vs-ascii
In computing, a C string is a character sequence terminated

with a null character ('\0', called NUL in ASCII). It is usually stored as one-dimensional character array.[dubious – discuss] The name refers to the C programming language which uses this string representation. Alternative names are ASCIIZ (note that C strings do not imply the use of ASCII) and null-terminated string
Слайд 11

null-terminated string void main() { char s1[8] = "Hi!\n"; int i;

null-terminated string

void main() {
char s1[8] = "Hi!\n";
int i;
for (i =

0; i < 8; i++) {
printf("%c(%d), ", s1[i], s1[i]);
}
}
Слайд 12

Инициализация строки как массива символов void main() { char s1[8] =

Инициализация строки как массива символов

void main() {
char s1[8] = { 'H',

'i', '!', '\n', '\0' };
int i;
for (i = 0; i < 8; i++) {
printf("%c(%d), ", s1[i], s1[i]);
}
}
Слайд 13

Инициализация строки как строки void main() { char s2[] = "%c(%d),

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

void main() {
char s2[] = "%c(%d), ";
int i;
for

(i = 0; i < 12; i++) {
printf("%c(%d), ", s2[i], s2[i]);
}
}
Слайд 14

Простейшие алгоритмы обработки строк (как массива символов с ‘\0’ в конце)

Простейшие алгоритмы обработки строк (как массива символов с ‘\0’ в конце)

Все

цифры заменить на символ «#»
#include
void main() {
char s3[] = "I have 32 USD and 5 EUR!";
printf("s3 = %s\n", s3);
int i = 0;
while (s3[i] != '\0') {
if (s3[i] >= '0' && s3[i] <= '9') {
s3[i] = '#';
}
i++;
}
printf("s3 = %s\n", s3);
}
Слайд 15

Используем функции из ctype.h Все цифры заменить на символ «#» #include

Используем функции из ctype.h

Все цифры заменить на символ «#»
#include
#include
void

main() {
char s3[] = "I have 32 USD and 5 EUR!";
printf("s3 = %s\n", s3);
int i = 0;
while (s3[i] != '\0') {
if (isdigit(s3[i])) {
s3[i] = '#';
}
i++;
}
printf("s3 = %s\n", s3);
}
Слайд 16

Используем функции из ctype.h Все ????? заменить на символ «#» void

Используем функции из ctype.h

Все ????? заменить на символ «#»
void main() {
char

s3[] = "I have 32 USD and 5 EUR!";
printf("s3 = %s\n", s3);
int i = 0;
while (s3[i] != '\0') {
if (isalpha(s3[i])) {
s3[i] = '#';
}
i++;
}
printf("s3 = %s\n", s3);
}
Слайд 17

Используем функции из ctype.h Все ????? заменить на символ «#» void

Используем функции из ctype.h

Все ????? заменить на символ «#»
void main() {
char

s3[] = "I have 32 USD and 5 EUR!";
printf("s3 = %s\n", s3);
int i = 0;
while (s3[i] != '\0') {
if (isspace(s3[i])) {
s3[i] = '#';
}
i++;
}
printf("s3 = %s\n", s3);
}
Слайд 18

Используем функции из ctype.h Все ????? заменить на символ «#» void

Используем функции из ctype.h

Все ????? заменить на символ «#»
void main() {
char

s3[] = "I have 32 USD and 5 EUR!";
printf("s3 = %s\n", s3);
int i = 0;
while (s3[i] != '\0') {
if (isupper(s3[i])) {
s3[i] = '#';
}
i++;
}
printf("s3 = %s\n", s3);
}
Слайд 19

Используем функции из ctype.h Все ????? заменить на символ «#» void

Используем функции из ctype.h

Все ????? заменить на символ «#»
void main() {
char

s3[] = "I have 32 USD and 5 EUR!";
printf("s3 = %s\n", s3);
int i = 0;
while (s3[i] != '\0') {
if (islower(s3[i])) {
s3[i] = '#';
}
i++;
}
printf("s3 = %s\n", s3);
}
Слайд 20

Используем функции из ctype.h Все ????? заменить на ?????? void main()

Используем функции из ctype.h

Все ????? заменить на ??????
void main() {
char s3[]

= "I have 32 USD and 5 EUR!";
printf("s3 = %s\n", s3);
int i = 0;
while (s3[i] != '\0') {
s3[i] = toupper(s3[i]);
i++;
}
printf("s3 = %s\n", s3);
}
Слайд 21

Используем функции из ctype.h Все ????? заменить на ?????? void main()

Используем функции из ctype.h

Все ????? заменить на ??????
void main() {
char s3[]

= "I have 32 USD and 5 EUR!";
printf("s3 = %s\n", s3);
int i = 0;
while (s3[i] != '\0') {
s3[i] = tolower(s3[i]);
i++;
}
printf("s3 = %s\n", s3);
}
Слайд 22

Обзор возможностей функций из ctype.h «Основы программирования на языках Си и

Обзор возможностей функций из ctype.h

«Основы программирования на языках Си и C++

для начинающих»
Заголовочный файл cctype (ctype.h) - http://cppstudio.com/cat/309/313/
Слайд 23

Обзор возможностей функций из ctype.h (2)

Обзор возможностей функций из ctype.h (2)

Слайд 24

Функции обработки строк

Функции обработки строк

Слайд 25

Стандартные функции обработки строк strlen(s) - Возвращает длину строки без завершающей

Стандартные функции обработки строк

strlen(s) - Возвращает длину строки без завершающей литеры

'\0'.
strcmp(s1, s2) – посимвольное сравнение строк (НЕЛЬЗЯ сравнивать строки так «s1 == s2» или так
«s1 < s2»!!!)
strcpy (dest, src) – копирует сроку src в dest, включая завершающий ‘\0’
strcat (dest, src) – добавляет копию src в конец dest
И еще около 20 функций из string.h
Слайд 26

strlen() #include void main() { char s[10] = "Hi!"; printf("len =

strlen()

#include
void main() {
char s[10] = "Hi!";
printf("len = %d\n", strlen(s));
s[3] =

' '; s[4] = '\0';
printf("len = %d\n", strlen(s));
s[4] = 'W'; s[5] = 'o'; s[6] = 'r'; s[7] = 'l';
s[8] = 'd'; s[9] = '\0';
printf("len = %d\n", strlen(s));
}
Слайд 27

strlen() #include void main() { char s[10] = "Hi!"; printf("len =

strlen()

#include
void main() {
char s[10] = "Hi!";
printf("len = %d\n", strlen(s));
s[3] =

' '; s[4] = '\0';
printf("len = %d\n", strlen(s));
s[4] = 'W'; s[5] = 'o'; s[6] = 'r'; s[7] = 'l';
s[8] = 'd'; s[9] = '\0';
printf("len = %d\n", strlen(s));
}
Слайд 28

Сравнение строк – НЕ ДЕЛАЙТЕ ТАК НИКОГДА!!! void main() { char

Сравнение строк – НЕ ДЕЛАЙТЕ ТАК НИКОГДА!!!

void main() {
char s1[] =

"Button";
char s2[] = "We";
char s3[] = "Apple !!";
char * min = s1; char * max = s1;
if (s2 > max) max = s2;
if (s3 > max) max = s3;
printf("max = %s\n", max);
if (s2 < min) min = s2;
if (s3 < min) min = s3;
printf("min = %s\n", min);
}
Слайд 29

Сравнение строк через strcmp int strcmp(const char *str1, const char *str2);

Сравнение строк через strcmp

int strcmp(const char *str1, const char *str2);
int strcmp(char

str1[], char str2[]);
Функция strcmp() сравнивает в лексикографическом порядке две строки и возвращает целое значение, зависящее следующим образом от результата сравнения.
Значение Результат сравнения строк
Меньше нуля str1 меньше str2
Нуль str1 равен str2
Больше нуля str1 больше str2
Слайд 30

Сравнение строк через strcmp void main() { char s1[] = "Button";

Сравнение строк через strcmp

void main() {
char s1[] = "Button";
char s2[] =

"We";
char s3[] = "Apple !!";
char * min = s1; char * max = s1;
if (strcmp(s2, max) > 0) max = s2;
if (strcmp(s2, max) > 0) max = s3;
printf("max = %s\n", max);
if (strcmp(s2, min) < 0) min = s2;
if (strcmp(s3, min) < 0) min = s3;
printf("min = %s\n", min);
}
Слайд 31

Копирование строк void main() { char src[] = "Button"; char dest[10];

Копирование строк

void main() {
char src[] = "Button";
char dest[10];
printf("src = %s, dest

= %s\n", src, dest);
strcpy(dest, src);
printf("src = %s, dest = %s\n", src, dest);
}
Слайд 32

Конкатенация строк void main() { char src[] = "Button"; char dest[10]

Конкатенация строк

void main() {
char src[] = "Button";
char dest[10] = "<>";
printf("src =

%s, dest = %s\n", src, dest);
strcat(dest, src);
printf("src = %s, dest = %s\n", src, dest);
strcat(dest, "!");
printf("src = %s, dest = %s\n", src, dest);
}
Слайд 33

Еще раз - int strlen(char s[]) int strlen(char s[]) { int

Еще раз - int strlen(char s[])

int strlen(char s[]) {
int len;

return len;
}
Возвращает

длину строки без завершающей литеры '\0'.
Пример:
strlen(“!!”) == 2
strlen(“Hi!\n”) ==4
Слайд 34

Собственная реализация strlen int strlen_my(char s[]) { int len; … return

Собственная реализация strlen

int strlen_my(char s[]) {
int len;

return len;
}
Нужно написать код функции

strlen_my(s), работающей аналогично strlen(s)
Пример использования:
strlen_my(“!!”) == 2
strlen_my(“Hi!\n”) ==4
Слайд 35

Собственная реализация strlen int strlen_my(char s[]) { int len = 0;

Собственная реализация strlen

int strlen_my(char s[])
{
int len = 0;
while (s[len] != '\0')
len++;
return

len;
}
Слайд 36

int strcmp(char s1[], char s2[]) int strcmp(const char *str1, const char

int strcmp(char s1[], char s2[])

int strcmp(const char *str1, const char *str2);
Функция

strcmp() сравнивает в лексикографическом порядке две строки и возвращает целое значение, зависящее следующим образом от результата сравнения.
Значение Результат сравнения строк
Меньше нуля str1 меньше str2
Нуль str1 равен str2
Больше нуля str1 больше str2
Пример использования:
strcmp(“Abba”, “Beta”) < 0
Слайд 37

Собственная реализация strcmp /* s1 s1 == s2 : 0 s1

Собственная реализация strcmp

/*
s1 < s2 : <0
s1 == s2 : 0
s1

> s2 : >0
*/
int strcmp_my(char s1[], char s2[])
{
return …;
}
Нужно написать код функции strcmp_my(s1, s2), работающей аналогично strcmp(s1, s2)
Пример использования:
strcmp_my(“Abba”, “Beta”) < 0
Слайд 38

Собственная реализация strcmp /* s1 s1 == s2 : 0 s1

Собственная реализация strcmp

/*
s1 < s2 : <0
s1 == s2 : 0
s1

> s2 : >0
*/
int strcmp_my(char s1[], char s2[])
{
int i = 0;
while (s1[i] != 0 && s2[i] != 0 && s1[i] == s2[i])
i++;
return s1[i] - s2[i];
}
Слайд 39

Собственная реализация strcpy !!!!

Собственная реализация strcpy

!!!!

Слайд 40

Собственная реализация strcat !!!!

Собственная реализация strcat

!!!!

Слайд 41

Слайд 42

Массивы и указатели

Массивы и указатели

Слайд 43

Указатели #include void main() { int k; // переменная k (целый

Указатели

#include
void main() {
int k; // переменная k (целый тип)

int* pk; // указатель на int
k = 10; // переменная k = 10
pk = &k; // указатель pk указывает на переменную k
// *pk – обращение через указатель к переменной
printf("%d %d\n", k, *pk);
*pk = 100;
printf("%d %d\n", k, *pk);
}
Слайд 44

Указатели – трассировка (1)

Указатели – трассировка (1)

Слайд 45

Указатели – трассировка (2)

Указатели – трассировка (2)

Слайд 46

Указатели – трассировка (3)

Указатели – трассировка (3)

Слайд 47

Указатели – трассировка (4)

Указатели – трассировка (4)

Слайд 48

Связь массивов и указателей #include void main() { int a[8] =

Связь массивов и указателей

#include
void main() {
int a[8] = {0,

1, 2, 3, 4, 5, 6, 7};
int* p0 = &a[0];
int* p1 = &a[1];
int* p7 = &a[7];
int* p00 = a;
int* p01 = a + 1;
int* p07 = a + 7;
*p0 = 100;
*p01 = 200;
}
Слайд 49

Связь массивов и указателей (1)

Связь массивов и указателей (1)

Слайд 50

Связь массивов и указателей (2)

Связь массивов и указателей (2)

Слайд 51

Связь массивов и указателей (3)

Связь массивов и указателей (3)

Слайд 52

Связь массивов и указателей (4)

Связь массивов и указателей (4)

Слайд 53

Связь массивов и указателей (5)

Связь массивов и указателей (5)

Слайд 54

Связь массивов и указателей (6)

Связь массивов и указателей (6)

Слайд 55

Связь массивов и указателей (7)

Связь массивов и указателей (7)

Слайд 56

Связь массивов и указателей (8)

Связь массивов и указателей (8)

Слайд 57

Связь массивов и указателей (9)

Связь массивов и указателей (9)

Слайд 58

Массив ar1 #include void main() { int ar[5] = { 10, 20, 30, 40, 50 };

Массив ar1

#include
void main() {
int ar[5] = { 10,

20, 30, 40, 50 };
Слайд 59

Вывод массива int i; printf("\n"); for (i = 0; i printf("%d ", ar[i]); printf("\n");

Вывод массива

int i;
printf("\n");
for (i = 0; i < 5; i++)
printf("%d ",

ar[i]);
printf("\n");
Слайд 60

Вывод массива при помощи указателей int* p; p = ar; for

Вывод массива при помощи указателей

int* p;
p = ar;
for (i =

0; i < 5; i++)
printf("%d ", *(p + i));
printf("\n");
Слайд 61

Вывод массива при помощи указателей (v 2) int* p1; p1 =

Вывод массива при помощи указателей (v 2)

int* p1;
p1 = ar;
for (i

= 0; i < 5; i++)
printf("%d ", *(p1++));
printf("\n");
Слайд 62

Вывод массива при помощи указателей (v 3) p1 = ar; while

Вывод массива при помощи указателей (v 3)

p1 = ar;
while (p1 -

ar < 5)
printf("%d ", *(p1++));
printf("\n");
Слайд 63

Нечто особое printf("!!!!\n"); p1 = ar + 4; while (p1 >= ar) printf("%d ", *(p1--)); printf("\n");

Нечто особое

printf("!!!!\n");
p1 = ar + 4;
while (p1 >= ar)
printf("%d ", *(p1--));
printf("\n");

Слайд 64

Нечто совсем особое printf("\n"); for (i = 0; i printf("%d ", i[ar]); printf("\n");

Нечто совсем особое

printf("\n");
for (i = 0; i < 5; i++)
printf("%d ",

i[ar]);
printf("\n");
Слайд 65

Нечто совсем особое printf("\n"); for (i = 0; i printf("%d ", i[ar]); printf("\n");

Нечто совсем особое

printf("\n");
for (i = 0; i < 5; i++)
printf("%d ",

i[ar]);
printf("\n");
Слайд 66

Массивы и указатели – еще раз int a[8] = {0, 1,

Массивы и указатели – еще раз

int a[8] = {0, 1, 2,

3, 4, 5, 6, 7};
a ≡ &a[0]
a + 1 ≡ &a[1] ? *(a + 1) ≡ a[1]
a + 1 ≡ 1 + a ? a[1] ≡ *(a + 1) ≡ *(1 + a) ≡ 1[a]
a + i ≡ &a[i] ? *(a + i) ≡ a[i]
a + i ≡ i + a ? a[i] ≡ *(a + i) ≡ *(i + a) ≡ i[a]
Слайд 67

Операции над указателями #include void main() { int a[8] = {10,

Операции над указателями

#include
void main() {
int a[8] = {10, 20,

30, 40, 50, 60, 70, 80};
int* p1 = &a[1];
int* p2 = &a[7];
int* p3 = p1 + 2; //1: К указателю добавляем целое число
int* p4 = p2 - 3; //2: Из указателя вычитаем целое число
int d = p2 - p1; //3: Из одного указателя вычитаем другой
printf("%d %d %d %d %d", *p1, *p2, *p3, *p4, d);
}
Слайд 68

Что можно почитать про «Указатели и массивы» Курс Лекций по Языку

Что можно почитать про «Указатели и массивы»
Курс Лекций по Языку Си.

Указатели и массивы - https://learnc.info/c/arrays_vs_pointers.html
Язык программирования Си. Глава 5. Указатели и массивы - https://cpp.com.ru/kr_cbook/ch5kr.html
Слайд 69

Слайд 70

Использование указателей при обработке строк

Использование указателей при обработке строк

Слайд 71

Собственная реализация strlen v2 int strlen_my(char s[]) { char* p =

Собственная реализация strlen v2

int strlen_my(char s[])
{
char* p = s;
while

(*p++);
return p - s - 1;
}

void main() {
char s[10] = "Hi!";
printf("len = %d\n", strlen_my(s));
s[3] = ' '; s[4] = '\0';
printf("len = %d\n", strlen_my(s));
s[4] = 'W'; s[5] = 'o'; s[6] = 'r'; s[7] = 'l';
s[8] = 'd'; s[9] = '\0';
printf("len = %d\n", strlen_my(s));
}

Слайд 72

Собственная реализация strlen v2 (2) int strlen_my(char s[]) { char* p

Собственная реализация strlen v2 (2)

int strlen_my(char s[])
{
char* p = s;

while (*p++);
return p - s - 1;
}

char s[10] = "Hi!";
printf("len = %d\n", strlen_my(s));

Слайд 73

Собственная реализация strlen v2 (3) int strlen_my(char s[]) { char* p

Собственная реализация strlen v2 (3)

int strlen_my(char s[])
{
char* p = s;

while (*p++);
return p - s - 1;
}

char s[10] = "Hi!";
s[3] = ' '; s[4] = '\0';
printf("len = %d\n", strlen_my(s));

Слайд 74

Собственная реализация strlen v2 (4) int strlen_my(char s[]) { char* p

Собственная реализация strlen v2 (4)

int strlen_my(char s[])
{
char* p = s;

while (*p++);
return p - s - 1;
}

char s[10] = "Hi!";
s[3] = ' '; s[4] = '\0';
s[4] = 'W'; s[5] = 'o'; s[6] = 'r'; s[7] = 'l';
s[8] = 'd'; s[9] = '\0';
printf("len = %d\n", strlen_my(s));

Слайд 75

Собственная реализация strcpy int strcpy_my(char* dest, char* src) { while (*dest++

Собственная реализация strcpy

int strcpy_my(char* dest, char* src)
{ while (*dest++ = *src++);
}

void

main() {
char src[] = "Button";
char dest[10];
printf("src = %s, dest = %s\n", src, dest);
strcpy_my(dest, src);
printf("src = %s, dest = %s\n", src, dest)n;
}
Слайд 76

Собственная реализация strcpy (2) int strcpy_my(char* dest, char* src) { while

Собственная реализация strcpy (2)

int strcpy_my(char* dest, char* src)
{ while (*dest++ =

*src++);
}

char src[] = "Button";
char dest[10];
strcpy_my(dest, src);

Слайд 77

Собственная реализация strcat int strcat_my(char* dest, char* src) { while (*dest)

Собственная реализация strcat

int strcat_my(char* dest, char* src)
{
while (*dest) dest++;
while (*dest++ =

*src++);
}

void main() {
char src[] = "Button";
char dest[10] = "<>";
printf("src = %s, dest = %s\n", src, dest);
strcat_my(dest, src);
printf("src = %s, dest = %s\n", src, dest);
strcat_my(dest, "!");
printf("src = %s, dest = %s\n", src, dest);
}

Слайд 78

Собственная реализация strcat (2) int strcat_my(char* dest, char* src) { while

Собственная реализация strcat (2)

int strcat_my(char* dest, char* src)
{
while (*dest) dest++;
while (*dest++

= *src++);
}

char src[] = "Button";
char dest[10] = "<>";
strcat_my(dest, src);
strcat_my(dest, "!");

Слайд 79

Слайд 80

Ввод строк с клавиатуры

Ввод строк с клавиатуры

Слайд 81

Ввод при помощи scanf #define _CRT_SECURE_NO_WARNINGS #include #include void main() {

Ввод при помощи scanf

#define _CRT_SECURE_NO_WARNINGS
#include
#include
void main() {
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
char f[30], i[30],

o[30];
printf("Фамилия:");
scanf("%s", f);
printf("Имя:");
scanf("%s", i);
printf("Имя:");
scanf("%s", o);
printf("%s %s %s", f, i, o);
}
Слайд 82

Ввод при помощи scanf_s //#define _CRT_SECURE_NO_WARNINGS #include #include void main() {

Ввод при помощи scanf_s

//#define _CRT_SECURE_NO_WARNINGS
#include
#include
void main() {
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
char f[30], i[30],

o[30];
printf("Фамилия:");
scanf_s("%s", f, 30);
printf("Имя:");
scanf_s("%s", i, 30);
printf("Имя:");
scanf_s("%s", o, 30);
printf("%s %s %s", f, i, o);
}
Слайд 83

Ввод при помощи fgets #include #include void main() { SetConsoleCP(1251); SetConsoleOutputCP(1251);

Ввод при помощи fgets

#include
#include
void main() {
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
char f[30], i[30], o[30];
printf("Фамилия:");
fgets(f,

30, stdin);
printf("Имя:");
fgets(i, 30, stdin);
printf("Имя:");
fgets(o, 30, stdin);
printf("%s %s %s", f, i, o);
}
Слайд 84

Слайд 85

Лабораторная работа №20 Знакомство с обработкой строк и символов

Лабораторная работа №20

Знакомство с обработкой строк и символов

Слайд 86

Задача 1 – Hello по русски!

Задача 1 – Hello по русски!

Слайд 87

Задача 1+ – Hello по русски! 1. Закомментируйте строку SetConsoleCP(1251); Запустите

Задача 1+ – Hello по русски!

1. Закомментируйте строку SetConsoleCP(1251);
Запустите программу

– посмотрите что получилось.
Раскомментируйте!
2. Закомментируйте строку SetConsoleOutputCP (1251);
Запустите программу – посмотрите что получилось.
Раскомментируйте!
3. Попробуйте ввести длинное имя – «Иван Иванович Иванов»
Посмотрите что получилось? Почему так получилось?
Слайд 88

Задача 2 Ввести символ CH Вывести на экран 20 символов с кодами от CH до CH+19

Задача 2

Ввести символ CH
Вывести на экран 20 символов с кодами от

CH до CH+19
Слайд 89

Задача 3* Ввести символ CH Вывести на экран 30 символов с кодами от CH до CH-29

Задача 3*

Ввести символ CH
Вывести на экран 30 символов с кодами от

CH до CH-29
Слайд 90

Задача 4 Ввести строку s. Подсчитать, сколько в ней пробелов

Задача 4

Ввести строку s. Подсчитать, сколько в ней пробелов

Слайд 91

Задача 5* Ввести строку s. Все пробелы в ней заменить символом

Задача 5*

Ввести строку s. Все пробелы в ней заменить символом ‘#’.


После обработки получившуюся строку вывести в консоль
Слайд 92

Задача 6.1 Ввести строку s. Все цифры в ней заменить символом ‘$‘. Используйте стандартную функцию isdigit()

Задача 6.1

Ввести строку s. Все цифры в ней заменить символом ‘$‘.
Используйте

стандартную функцию isdigit()
Слайд 93

Задача 6.2 Ввести строку s. Все цифры в ней заменить символом

Задача 6.2

Ввести строку s. Все цифры в ней заменить символом ‘$‘
Используйте

свою собственную реализацию функции isdigit()
Слайд 94

Задача 7.1 Ввести строку s (без русских символов). Все маленькие латинские

Задача 7.1

Ввести строку s (без русских символов). Все маленькие латинские буквы

превратить в большие
Используйте стандартную функцию toupper
Слайд 95

Задача 7.2* Ввести строку s с русскими и латинскими символами. Все

Задача 7.2*

Ввести строку s с русскими и латинскими символами. Все маленькие

буквы превратить в большие.
Используйте свою собственную реализацию функции toupper
Слайд 96

Задача 8* Создать на основе разработанного кода проект с собственным модулем.

Задача 8*

Создать на основе разработанного кода проект с собственным модулем.

Слайд 97

Задача 8* (1) Создаем новый проект

Задача 8* (1)

Создаем новый проект

Слайд 98

Задача 8* (2) Создаем файл для главного модуля – в нем будет находиться main()

Задача 8* (2)

Создаем файл для главного модуля – в нем будет

находиться main()
Слайд 99

Задача 8* (3) В главный модуль вставляем код main() с реализацией задачи 7.2

Задача 8* (3)

В главный модуль вставляем код main() с реализацией задачи

7.2
Слайд 100

Задача 8* (4) Создаем второй модуль – в нем будут находиться

Задача 8* (4)

Создаем второй модуль – в нем будут находиться наши

собственные реализации функций isDigitMy, toUpperAll и других.
Слайд 101

Задача 8* (5) В CPP файл второго модуля вставляем код функций isDigitMy, toUpperAll

Задача 8* (5)

В CPP файл второго модуля вставляем код функций isDigitMy,

toUpperAll
Слайд 102

Задача 8* (6) Создаем заголовочный файл для второго модуля

Задача 8* (6)

Создаем заголовочный файл для второго модуля

Слайд 103

Задача 8* (7) В заголовочный файл второго модуля добавляем прототипы функций isDigitMy, toUpperAll

Задача 8* (7)

В заголовочный файл второго модуля добавляем прототипы функций isDigitMy,

toUpperAll
Слайд 104

Задача 8* (8) В главный модуль включаем заголовочный файл нашего второго модуля

Задача 8* (8)

В главный модуль включаем заголовочный файл нашего второго модуля

Слайд 105

Задача 8* (9) В CPP файл нашего второго модуля включаем заголовочный файл нашего же второго модуля

Задача 8* (9)

В CPP файл нашего второго модуля включаем заголовочный файл

нашего же второго модуля
Слайд 106

Задача 8* (10) Собираем код

Задача 8* (10)

Собираем код

Слайд 107

Задача 8* (11) Запускаем на выполнение!

Задача 8* (11)

Запускаем на выполнение!

Слайд 108

Задача 9 * Реализовать собственную версию функции int strlen(char *) Добавить

Задача 9 *

Реализовать собственную версию функции int strlen(char *)
Добавить ее во

второй модуль
Написать код для проверки работоспособности этой функции – можно использовать код из лекции
Слайд 109

Задача 10 ** Реализовать собственную версию функции int strcmp (char *,

Задача 10 **

Реализовать собственную версию функции int strcmp (char *, char

*)
Добавить ее во второй модуль
Написать код для проверки работоспособности этой функции – можно использовать код из лекции
Слайд 110

Задача 11 ** Реализовать собственную версию функции void strcpy (char *,

Задача 11 **

Реализовать собственную версию функции void strcpy (char *, char

*)
Добавить ее во второй модуль
Написать код для проверки работоспособности этой функции – можно использовать код из лекции
Слайд 111

Задача 12 ** Реализовать собственную версию функции void strcat (char *,

Задача 12 **

Реализовать собственную версию функции void strcat (char *, char

*)
Добавить ее во второй модуль
Написать код для проверки работоспособности этой функции – можно использовать код из лекции
Слайд 112

Домашнее задание - часть 1 Доделать задачи с *, которые не

Домашнее задание - часть 1

Доделать задачи с *, которые не были

сделаны в классе.
Все собственные функции должны быть собраны во втором модуле.
В главном модуле для каждой из задач должен быть отдельный метод, в котором выполняет ввод, обработка и вывод.
** - если вы претендуете на уровень «Выше среднего» крайне полезно также доделать задачи с **
Слайд 113

Домашнее задание - часть 2 Сделать индивидуальную задачу - выберите свой

Домашнее задание - часть 2

Сделать индивидуальную задачу - выберите свой вариант

преобразования – согласно номера в журнале!
Общее задание:
Нужно ввести одну строку с клавиатуры.
Введенную строку нужно вывести без изменений (для контроля) и вывести после обработки описанной в вашем варианте:
Все маленькие латинские буквы заменить символом ‘#’.
Все гласные латинские буквы заменить символом ‘&’.
Все согласные латинские буквы заменить символом ‘&’.
Все гласные большие латинские буквы заменить символом ‘$’.
Все гласные маленькие латинские буквы заменить символом ‘@’.
Все цифры заменить символом ‘X’.
Все латинские буквы сделать большими.
Все латинские буквы сделать маленькими.
Все символы за исключением латинских букв, заменить символом ‘_’ (подчеркивание).
Все знаки препинания заменить символом ‘_’ (подчеркивание).
Все символы арифметических операций, заменить символом ‘_’ (подчеркивание).
Слайд 114

ИТОГО по лабораторной работе 20 Попробовали работать с символами Попробовали работать

ИТОГО по лабораторной работе 20

Попробовали работать с символами
Попробовали работать со строками
Написали

несколько собственных функций по обработке символов и строк
* Создали свой собственный модуль с созданными функциями обработки строк
Слайд 115

Слайд 116

Лабораторная работа №21 Изучение стандартной библиотеки Си. Модули обработки символов и строк

Лабораторная работа №21

Изучение стандартной библиотеки Си. Модули обработки символов и строк

Слайд 117

Задача 1 – Найти в интернете информацию Нужно найти в интернете

Задача 1 – Найти в интернете информацию

Нужно найти в интернете описание

модулей ctype.h и string.h
Изучить поверхностно это описание.
Можно использовать например такие строки поиска:
«ctype.h язык Си»
«string.h язык Си»
Слайд 118

Задача 2 – Выбрать функции для подробного изучения Используя информацию из

Задача 2 – Выбрать функции для подробного изучения

Используя информацию из Интернета

изучить список функций в модулях ctype.h и string.h.
Из модуля ctype.h взять функции isdigit, isupper, toupper
Из модуля ctype.h взять еще от 1 до 5 функций.
Из модуля string.h взять функции strlen, strcpy, strcmp.
Из модуля string.h взять еще от 1 до 5 функций.
Таким образом у каждого студента будет выбрано для изучения по 4-8 функций из каждого из модулей ctype.h и string.h
Список функций, которые нельзя выбирать – isalpha, strcat (они взяты в качестве образца ниже!)
Слайд 119

Задача 3 – Подготовить код для одной из выбранных функций Нужно

Задача 3 – Подготовить код для одной из выбранных функций

Нужно подготовить

код с комментариями, которого достаточно для того, чтобы вспомнить самому или объяснить другому как работает описываемая функция.
Структура:
Источник информации (работающая ссылка)
Краткое описание - с указанием что делает функция, перечислением всех параметров и возвращаемого значения.
Код в котором есть образцы входных данных, есть пример использования функции, и есть вывод результата выполнения функции. Пример использования функции пояснен в коде - в виде комментариев.
Слайд 120

Задача 3. Образец выполнения на примере isalpha() - 1 // Источник

Задача 3. Образец выполнения на примере isalpha() - 1

// Источник информации:

https://ru.wikipedia.org/wiki/Ctype.h
// Краткое описание:
// int isalpha(int c);
// Возвращает ненулевое значение, если её аргумент является буквой,
// в противном случае возвращается нуль.
void testIsAlpha1() {
printf("Тест функции isalpha()\n");
// Найти в строке все вхождения букв и заменить их на символ '!’
char s[] = "I have 32 USD and 5 EUR! ";
printf("s = %s\n", s);
int i = 0;
while (s[i] != '\0') {
if (isalpha(s[i])) {
s[i] = '!’;
}
i++;
}
printf("s = %s\n", s);
}
Слайд 121

Задача 3. Образец выполнения на примере isalpha() - 2 #include #include

Задача 3. Образец выполнения на примере isalpha() - 2

#include
#include
#include


#include
void main() {
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
testIsAlpha1();
//testIsAlpha2();
testIsAlpha3();
}
Слайд 122

Задача 3. Образец выполнения на примере isalpha() - 3 void testIsAlpha2()

Задача 3. Образец выполнения на примере isalpha() - 3
void testIsAlpha2() {
printf("Тест

функции isalpha()\n");
// Найти в строке все вхождения букв и заменить их на символ '!’
char s[] = "I have 32 USD and 5 EUR! Привет!";
printf("s = %s\n", s);
int i = 0;
while (s[i] != '\0') {
if (isalpha(s[i])) {
s[i] = '!’;
}
i++;
}
printf("s = %s\n", s);
}
Слайд 123

Задача 3. Образец выполнения на примере isalpha() - 4 void testIsAlpha3()

Задача 3. Образец выполнения на примере isalpha() - 4

void testIsAlpha3() {
printf("Тест

функции isalpha()\n");
// Найти в строке все вхождения букв и заменить их на символ '!’
char s[] = "I have 32 USD and 5 EUR! Проверим русские буквы";
printf("s = %s\n", s);
int i = 0;
while (s[i] != '\0') {
if (isalpha((unsigned char)s[i])) {
s[i] = '!’;
}
i++;
}
printf("s = %s\n", s);
}
Слайд 124

Задача 4-10+ Подготовить код для каждой из выбранных функций Как и

Задача 4-10+ Подготовить код для каждой из выбранных функций

Как и в

задаче 3 нужно подготовить код с комментариями, которого достаточно для того, чтобы вспомнить самому или объяснить другому как работает описываемая функция.
Структура:
Источник информации (работающая ссылка)
Краткое описание - с указанием что делает функция, перечислением всех параметров и возвращаемого значения.
Код в котором есть образцы входных данных, есть пример использования функции, и есть вывод результата выполнения функции. Пример использования функции пояснен в коде - в виде комментариев.
В качестве образца можно использовать код из задачи 3.
Примеры кода можно брать откуда угодно – из интернета, из книг, из примеров из лекции, придумывать самому, просить подсказать друзей.
Слайд 125

Задача 4. Образец выполнения на примере strcat() - 1 // Источник

Задача 4. Образец выполнения на примере strcat() - 1

// Источник информации:

http://all-ht.ru/inf/prog/c/func/strcat.html
// Краткое описание:
// char *strcat (char *destination, const char *append);
// Аргументы:
// destination – указатель на массив в который будет добавлена строка.
// append – указатель на массив из которого будет скопирована строка.
//
// Возвращаемое значение :
// Функция возвращает указатель на массив, в который добавлена строка(destination).
//
// Описание :
// Функция strcat добавляет в строку, на которую указывает аргумент destination,
// строку, на которую указывает аргумент append.
// Символ конца строки помещается в конце объединенных строк.
// Если строки перекрываются, результат объединения будет не определен.
Слайд 126

Задача 4. Образец выполнения на примере strcat() - 2 void testStrCat()

Задача 4. Образец выполнения на примере strcat() - 2

void testStrCat() {
printf("Тест

функции strcat()\n");
char src[] = "Button";
char dest[10] = "<>";
printf("src = %s, dest = %s\n", src, dest);
strcat(dest, src);
printf("src = %s, dest = %s\n", src, dest);
strcat(dest, "!");
printf("src = %s, dest = %s\n", src, dest);
}
void main() {
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
testStrCat();
}
Слайд 127

ИТОГО по лабораторной работе 21 Попробовали самостоятельно найти информацию по стандартным

ИТОГО по лабораторной работе 21

Попробовали самостоятельно найти информацию по стандартным функциям.
Потренировали

создавать образцы использования стандартных функций.
Слайд 128