Работа с символами
8.4.3.11 использовать функции для обработки символов (char, int)
Основные типы данных в С ++
Любая информация, обрабатываемая компьютером, является совокупностью нулей и единиц, которые принято называть битами. Неважно, что мы видим на экране цифры, буквы, символы или знаки, все это компьютер распознает и хранит в виде цифр 0 и 1.
Задание 1. Объясни что означают термины: кодирование, декодирование и виды кодировок.
Кодирование — это процесс преобразования информации из одной формы в другую. Кодирование — это когда мы превращаем символы в числа, чтобы компьютер мог их понять.
Пример с текстом: Вы пишете букву «A». По стандарту ASCII компьютер кодирует её как число 65
(а в двоичной системе это 01000001).
Декодирование — обратный процесс. Это превращение набора чисел или сигналов обратно в понятные нам образы или текст. Было число → стало символ
Вы заходите на сайт, и сервер присылает вашему компьютеру набор байтов. Браузер видит число 104 и, используя таблицу кодировки, понимает, что на экран нужно вывести букву «h».
Функция char(33) берет число 33 и выдает вам символ «!».
Кодировка — это «словарь» или таблица соответствий, где за каждым символом закреплено конкретное
число. Кодировка — это таблица правил, которая говорит: "какому символу соответствует какое число"
Без знания кодировки компьютер не поймёт, какую букву нужно вывести на экран.
Представьте, что у нас есть число 49. Результат будет зависеть от того, какую «таблицу» мы выберем:
Если мы используем таблицу символов (ASCII/Unicode): Число 49 — это символ '1' (единица как текст).
Символ: 'G'
Кодирование: (int)'G' (в C++) → получаем 71.
Декодирование: chr(71) (в C++) → получаем обратно 'G'.
Характеристика | ASCII | UNICODE |
Количество символов | 128 (базовая) или 256 (расширенная). | Более 140 000 (включает почти все языки мира). |
Размер одного символа | 1 байт (8 бит). | От 1 до 4 байт (в зависимости от формата, например, UTF-8). |
Языки | Только английский, цифры и спецсимволы. | Все языки мира, эмодзи, исторические символы. |
ASCII (American Standard Code for Information Interchange.)— это старый стандарт. Его достаточно для базовых программ на английском, но он бессилен,
если нужно написать слово на казахском или поставить смайлик.
Unicode (Universal and Uniform character encoding) — это универсальное решение, которое объединяет все знаки в одну гигантскую таблицу.
Кодирование – это перевод информации с одного языка на другой (запись в другой системе символов, в другом алфавите). При этом обычно кодированием называют перевод информации с «человеческого» языка на формальный, например, в двоичный код, а декодированием – обратный переход.
В языке программирования C++ можно работать с символами с помощью функций char (код символа) и int (символ).
Функции char и int в программировании
В языках вроде C++ символы и числа тесно связаны. Компьютер не видит букву 'A', он видит число 65.
Преобразование типов:
Когда мы работаем с символами, мы используем две основные операции:
Пример: Символ 'B' → Число 66.�
Пример: Число 104→ Символ 'h'.
Важно помнить: > Тип char — это, по сути, маленькое целое число. Когда вы выводите его как символ, компьютер смотрит в таблицу (ASCII или Unicode) и рисует букву. Когда вы работаете с ним как с int, вы видите его порядковый номер в этой таблице.
#include <iostream>
using namespace std;
int main() {
char c = 'B';
cout << "Символ: " << c << endl;
cout << "Код: " << (int)c << endl;
return 0;
}
#include <iostream>
using namespace std;
int main() {
char c; // переменная для символа
int code; // переменная для кода
cout << "Введите символ => ";
cin >> c; // ввод символа
cout << int(c); // перевод символа в число
return 0;
}
#include <iostream>
using namespace std;
int main() {
char c;
int code; // переменная для числа
cout << "Введите код символа => ";
cin >> code; // ввод числа
cout << char(code); // перевод числа в символ
return 0;
}
Задание 2.
Используя программу «Код в символ», раскодируй код 75 79 68. Какое слово у тебя получилось?
Ответ: KOD
Задачи 1
2. Создай программу:
Которая по заданной букве определяет и выводит на экран (например, ввод d, вывод 4, c, e):
#include <iostream>
using namespace std;
int main() {
char c; // переменная для одной буквы
cin >> c; // ввод буквы
if (c >= 'A' && c <= 'Z') // если это заглавная английская буква
c = c + 32; // делаем её строчной
cout << c; // вывод результата
return 0;
}
#include <iostream>
using namespace std;
int main() {
char c;
// b) Большая → маленькая
cin >> c;
if (c >= 'A' && c <= 'Z')
cout << char(c + 32) << endl;
else
cout << c << endl;
// c) Маленькая → большая
cin >> c;
if (c >= 'a' && c <= 'z')
cout << char(c - 32) << endl;
else
cout << c << endl;
return 0;
}
#include <iostream>
using namespace std;
int main() {
char c;
cin >> c;
// a = 1, b = 2 ...
int position = c - 'a' + 1;
cout << position << endl;
cout << char(c - 1) << endl; // предыдущая
cout << char(c + 1) << endl; // следующая
return 0;
}
#include <iostream>
using namespace std;
int main() {
char c; // переменная для буквы
cin >> c; // ввод буквы
int position = c - 'a' + 1; // номер буквы
cout << position << endl; // вывод номера
cout << char(c - 1) << endl; // предыдущая буква
cout << char(c + 1) << endl; // следующая буква
return 0;
}
Строка
int position = c - 'a' + 1;
нужна для того, чтобы определить порядковый номер буквы в английском алфавите.
Почему это работает? Потому что английские строчные буквы в таблице кодов идут подряд:�a = 97�b = 98�c = 99�d = 100�и так далее.
Допустим, пользователь ввёл букву d.�Тогда:�c = 'd'
Компьютер берёт код буквы d, то есть 100, и вычитает код буквы a, то есть 97:
100 - 97 = 3
Но буква d в алфавите стоит на 4 месте, а не на 3, поэтому мы прибавляем 1:
3 + 1 = 4
В итоге переменная position получает значение 4.
Значит выражение
c - 'a' + 1
показывает номер буквы в алфавите.
Например:�
если c = 'a', то 97 - 97 + 1 = 1�если c = 'b', то 98 - 97 + 1 = 2�если c = 'c', то 99 - 97 + 1 = 3�если c = 'd', то 100 - 97 + 1 = 4
Строка
char(c - 1)
нужна для того, чтобы найти предыдущую букву.
Почему это работает? Потому что буквы идут подряд по кодам.�Если d имеет код 100, то буква перед ней c имеет код 99.
Значит:�d - 1 = c
Если пользователь ввёл d, то:�c = 'd'�char(c - 1) = char(100 - 1) = char(99) = 'c'
То есть программа выводит предыдущую букву.
Примеры:�если c = 'b', то предыдущая буква будет 'a'�если c = 'm', то предыдущая буква будет 'l'�если c = 'z', то предыдущая буква будет 'y'
Строка
char(c + 1)
нужна для того, чтобы найти следующую букву.
Почему это работает? Потому что следующая буква имеет код на 1 больше.
Например:�d = 100�e = 101
Значит:�d + 1 = e
Если пользователь ввёл d, то:�c = 'd'�char(c + 1) = char(100 + 1) = char(101) = 'e'
То есть программа выводит следующую букву.
Примеры:�если c = 'a', то следующая буква будет 'b'�если c = 'k', то следующая буква будет 'l'�если c = 'y', то следующая буква будет 'z'
Важный момент
Если пользователь введёт букву a, то выражение
char(c - 1)
даст не букву, а символ, который стоит перед a в таблице кодов.
То есть:�a = 97�97 - 1 = 96
А код 96 — это уже не буква английского алфавита.
Точно так же, если пользователь введёт z, то выражение
char(c + 1)
даст символ после z, а не букву.
Поэтому такую программу лучше использовать только тогда, когда заранее известно, что вводятся буквы, для которых существуют соседние буквы. Например, не a и не z.
Общий смысл задания такой:�буквы хранятся в памяти как числа, поэтому над ними можно выполнять простые действия:�вычитая код буквы a, находим номер буквы в алфавите;�вычитая 1, находим предыдущую букву;�прибавляя 1, находим следующую букву.
#include <iostream>
using namespace std;
int main() {
char c; // переменная для хранения символа
cin >> c; // ввод буквы
if (c >= 'a' && c <= 'z') { // проверяем, что это строчная английская буква
cout << c - 'a' + 1 << endl; // номер буквы в алфавите (a=1, b=2 и т.д.)
if (c > 'a')
cout << char(c - 1) << endl; // предыдущая буква
else
cout << "нет" << endl; // если это 'a', предыдущей буквы нет
if (c < 'z')
cout << char(c + 1) << endl; // следующая буква
else
cout << "нет" << endl; // если это 'z', следующей буквы нет
}
return 0; // завершение программы
}
Работа со строками в программе
На C++ нумерация начинается с нуля. Например, у нас есть строка «доктор». Для хранения набора символов на С++ используется описание:
char s1[n]
где s1 – имя строки, n – количество отводимых ячеек в памяти для хранения символов.
Строка – это набор символов, и каждый символ в строке имеет свой индекс (номер)
Нумерация элементов в строковом массиве начинается с 0.
Для работы со строками существует ряд функций и процедур. Но для их использования надо подключить заголовочный файл:
#include <string.h>
Задачи 2
1. Дано название футбольного клуба. Создать программу, которая определяет количество символов в нем.
2. Даны названия двух городов Казахстана. Присвоить названия городов переменным s1 и s2, после чего поменять их значения местами.
Рефлексия