Программирование на языке высокого уровня


Презентация изнутри:

Слайд 0

Программирование на языке высокого уровня C++ > Лекция 5 > Символы. Кодировки. Строки Кафедра АСОИУ ОмГТУ, 2012 Богатов Р.Н.


Слайд 1

«Ходовые» типы данных


Слайд 2

Символы Скольки-значный код потребуется для представления одного символа текста? A…Z a…z 0…9 "!?.,:;№_-+*/%\=<>(){}[]@#$^&~|’ – это 27+27+10+32+… ? 96 символов 6 бит = 64 значения 7 бит = 128 значений 8 бит = 256 значений Изначальная идея: один символ – один байт. Коды 0…127 – основной набор символов, коды 128…255 – для национального алфавита. ASCII – базовая 7-битовая кодировка для латинского алфавита и основных символов. Кириллические кодировки (CP866, Windows CP1251, KOI8-R и другие) отличаются только размещением русских букв в диапазоне кодов 128…255.


Слайд 3

Кодировка Windows CP1251 ASCII


Слайд 4

ASCII (128..255) CP1251 (128..255) Вставка символа в Microsoft Word Unicode 128..65535


Слайд 5

Фрагменты символов Unicode


Слайд 6

// объявление и инициализация char a, b; a = '7'; printf("%c", a); b = (char)55; // то же самое printf("%c", b); Символы в C++ // посмотреть кодировку for (int i = 0; i < 256; i++) printf("%c", i ); printf("Code page #866:\n"); setlocale(LC_ALL, ".866"); // по умолчанию, можно не указывать for (int i = 128; i < 256; i++) printf("%c", i ); printf("\n\nCode page #1251:\n"); setlocale(LC_ALL, ".1251"); // или setlocale(LC_ALL, "Russian") for (int i = 128; i < 256; i++) printf("%c", i );


Слайд 7

Строки в C++ char s[6]; s[0] = 72; s[1] = 101; s[2] = 108; s[3] = 108; s[4] = 111; s[5] = 0; char s[] = "Hello"; char s[6]; s[0] = 'H'; s[1] = 'e'; s[2] = 'l'; s[3] = 'l'; s[4] = 'o'; s[5] = 0; for (int i = 0; i < 5; i++) printf("%d", s[i] ); for (int i = 0; i < 5; i++) printf("%c", s[i] ); printf("%s", s ); printf("What's your name? "); char x[20]; scanf("%s", x); printf("Hi, %s!", x);


Слайд 8

Строки в C++ – нуль-терминированные // эксперимент! char s[] = "Hello, World!"; printf("Вариант 1: %s\n", s); s[5] = 0; printf("Вариант 2: %s\n", s); s[5] = '!'; printf("Вариант 3: %s\n", s); // строка из двух символов char a[3]; a[0]='H'; a[1]='i'; a[2]=0; // строка из одного символа char b[2]; b[0]='!'; b[1]=0; // пустая строка (без текста) char c[1]; c[0]=0; // строка из двух символов char a[] = "Hi"; // строка из одного символа char b[] = "!"; // пустая строка (без текста) char c[] = ""; // найти длину строки printf("Введите текст: "); char t[2000]; scanf("%s", t); int i = 0; for(;; i++) if (t[i]==0) break; printf("В тексте %d символов!", i); // найти длину строки printf("Введите текст: "); char t[2000]; scanf("%[^\n]s", t); int i = 0; for(;; i++) if (t[i]==0) break; printf("В тексте %d символов!", i); // найти длину строки printf("Введите текст: "); char t[2000]; scanf("%[^\n]s", t); printf("В тексте %d символов!", strlen(t)); #include <string.h> // для продвинутых: создание своей функции int mystrlen(char s[]) { int i = 0; for(;; i++) if (s[i]==0) break; return i; } void main() { printf("Введите текст: "); char t[2000]; scanf("%1999[^\n]s", t); printf("В тексте %d символов!", mystrlen(t)); }


Слайд 9

Перевод в шестнадцатеричную систему счисления printf("Введите положительное целое: "); int n; scanf("%d", &n); printf("Шестнадцатеричная запись:\n"); do { int x = n % 16; n = n / 16; printf("%d\n", x ); } while (n>0); printf("Введите положительное целое: "); int n; scanf("%d", &n); printf("Шестнадцатеричная запись:\n"); do { int x = n % 16; n = n / 16; char z; if( x<10 ) z = '0' + x; else z = 'A' + x - 10; printf("%c\n", z ); } while (n>0); char s[8]; int i=0; do { int x = n % 16; n = n / 16; char z; if( x<10 ) z = '0' + x; else z = 'A' + x - 10; s[i] = z; i++; } while (n>0); // после цикла i - количество полученных цифр // переворачиваем содержимое строки for(int j=0; j<i/2; j++) { char c = s[j]; s[j]= s[i-j-1]; s[i-j-1] = c; } s[i]=0; // терминируем строку и выводим printf("%s", s);


Слайд 10

Подсчёт слов, начинающихся с заглавной буквы printf("Input text: "); char s[2000]; scanf("%[^\n]s", s); int count = 0; for(int i=0; i<strlen(s)-1; i++) if ( s[i]==' ' && s[i+1]>='A' && s[i+1]<='Z' ) count++; printf("There're %d words that start by a capital letter\n", count); printf("Input text: "); char s[2000]; scanf("%[^\n]s", s); int count; // с первой буквой разбираемся отдельно if ( s[0]>='A' && s[0]<='Z' ) count = 1; else count = 0; for(int i=0; i<strlen(s)-1; i++) if ( s[i]==' ' && s[i+1]>='A' && s[i+1]<='Z' ) count++; printf("There're %d words that start by a capital letter\n", count); // оптимальное решение: // заранее добавить перед текстом лишний пробел printf("Input text: "); char s[2000] = " "; scanf("%[^\n]s", s+1); int count = 0; for(int i=0; i<strlen(s)-1; i++) if ( s[i]==' ' && s[i+1]>='A' && s[i+1]<='Z' ) count++; printf("There're %d words that start by a capital letter\n", count);


Слайд 11

Использование string.h printf("Guess my name? "); char name[50]; scanf("%s", name); // конвертирование всех букв в нижний регистр // например, "KaTe" -> "kate" strlwr(name); // проверка на равенство if( strcmp(name, "stacy")==0 ) printf("Correct!!!"); else printf("Not exactly..."); printf("Login: "); char login[200]; scanf("%s", login); // проверка на наличие подстроки if( strstr(login, "putin")!=NULL ) { printf("Unknown error. Terminating..."); return; } ... #include <string.h>


Слайд 12

Использование string.h // Задача: в строке, содержащей путь и имя файла, // изменить расширение в имени файла на "txt" printf("Введите имя файла: "); char filename[200]; scanf("%[^\n]s", filename); int n = strlen(filename); printf("Длина строки: %d\n", n ); // отсечение расширения вручную int j=-1; for(int i=n-1; i>=0; i--) if (filename[i]=='.') j = i; if( j>-1 ) filename[j] = 0; printf("Имя файла без расширения: %s\n", filename); strcat(filename, ".txt"); // приклеиваем новое расширение printf("Имя файла с новым расширением: %s\n", filename); // отсечение расширения с помощью strrchr char *p; // поиск первой точки при просмотре справа-налево p = strrchr(filename, '.'); if( p!=NULL ) *p = 0; // затираем точку кодом конца строки #include <string.h>


Слайд 13

Домашнее задание Подсчитать количество «слов» в тексте, который введёт пользователь. За «слово» считать любую последовательность символов, не содержащую пробелов. Пример текста: Точка (x1; y1) находится в … квадранте. Ответ: в этом тексте 7 «слов» Очевидная структура алгоритма: общий цикл, пока не кончится текст цикл пропуска пробелов (одного или нескольких идущих подряд) цикл пропуска не-пробелов (составляющих «слово») инкрементирование счётчика слов


×

HTML:





Ссылка: