Символьный тип данных
Каждый новичок начинает свой путь в мир программирования с простой программы, которая запрашивает текст у пользователя, а после выводит его на экран. Все эти махинации напрямую связаны с символьным типом данных, который в программировании называется char.
Многие недооценивают важность этой темы и пропускают ее, а потому вскоре встречаются с рядом проблем. Например, если вы уже пробовали считывать данные с файла, а потом выводить в консоль, то могли заметить: вместо изначальных символов на экране отображается беспорядочный набор символов. О том, как работают символы и почему с ними часто возникают проблемы, читайте ниже.
Как система работает с символами
Во-первых, к символам относится все, что вводится с клавиатуры. Латиница, кириллица, иероглифы, арабская вязь, специальные знаки (/, %, #…) и даже смайлики – все это символы. Каждый символ имеет свой порядковый номер или любой другой уникальный код, под которым он записан в систему.
Совокупность всех символов и их номеров образуют специальную таблицу, которая называется кодировка. Поместить все символы в одну кодировку очень невыгодно, потому что такой текст будет занимать слишком много места. Потому существует несколько кодировок. Например, только для арабской вязи используется как минимум три.
Самые известные кодировки:
- ANSI;
- UTF-8;
- WINDOWS-1251;
- UTF-16;
- ASCII.
Наиболее популярной таблицей символов для латинского алфавита (с учетом всех дополнительных символов) считается ASCII. Ниже Вы можете увидеть небольшой фрагмент таблицы, где сопоставлен символ и его численное обозначение.
Интересный факт. Все символы таблицы ASCII можно вызвать по их кодам. Для этого необходимо зажать alt, а потом не отпуская ввести код символа. Пример: alt + 1234 = Ӓ.
Зачем программисту знать кодировки
Во-первых, знание кодов определенных символов применяется в разработке и верстке. Например, знак © отсутствует на клавиатуре, но его можно вызвать через ascii код (Alt+0169) или через мнемонику с помощью кода ©.
Во-вторых, неправильная кодировка может привести к неправильному сохранению данных. В итоге, вместо «привет, мир!» на экране будет отображаться что-то похожее на ������������������.
Ввод и вывод символов
В большинстве языков программирования все вводимые данные являются символьными. Даже если вы введете цифру, то она автоматически станет символом (исключение: языки со статическим типом данных). Ниже представлен пример ввода символов на разных языках программирования.
C++:
#include<iostream>
Intmain(){
char x = 0;
std::cin>> x;
return 0;
}
Python:
x = input()
Javascript:
x = confirm(question);
Вывод символов в консоль еще проще:
C++:
#include<iostream>
int main(){
std::cout<< “Hello World!”;
return 0;
}
Python:
print(“Hello world”)
Javascript:
alert(“Hello world”)
Определение кодировки для текста
Большинство языков автоматически определяют нужную кодировку, но ее можно поменять вручную. Рассмотрим на примере языка C++:
#include <iostream>
using namespace std;
int main(){
setlocale(LC_ALL, «Russian»);
char x = “”;
cin>> x;
return 0;
}
В программе нас интересует строка «setlocale(LC_ALL, «Russian»)». Именно она отвечает за определение кодировки.LC_ALL– это аргумент, который сообщает программе, что локализуется каждый символ. Помимо LC_ALL существуют следующие аргументы локали:
- LC_ALL;
- LC_COLLATE;
- LC_CTYPE;
- LC_MONETARY;
- LC_NUMERIC;
- LC_TIME;
Строки и символы
Несмотря на то, что в программировании существует отдельный тип данных для строк, который называется string, все строки – это обыкновенные динамические массивы символов. То есть строка “x = example” на самом деле это массив символов и компьютером распознается как x = [‘e’, ‘x’, ‘a’, ‘m’, ‘p’, ‘l’, ‘e’]. Это очень удобно, потому что позволяет работать с каждым символом в отдельности. Например, если мы хотим узнать первую букву в строке, то нам достаточно ввести следующую команду:
X = “example”
print(X[0])
Это важно! В строке, как и в любом массиве, первая буква имеет индекс 0, а последняя имеет индекс равный количеству символов минус один.
Символы экранирования
С помощью специальных символов возможно управлять внешним видом текста. Ниже представлена таблица всех символов экранирования:
\n | Новая строка |
\t | Табуляция |
\’ | Апостроф (необходимо, если вся строка помещена в апостроф) |
\” | Кавычки (необходимо, если вся строка помещена в кавычки |
\\ | Обратная косая черта (backslash) |
\b | Удаление символа слева от каретки (backspace) |
\r | Возврат каретки |
\f | Прогон страницы |
Обработка строк на примере языка Си
Все функции для обработки строк находятся в библиотеке string.h, которую необходимо изначально подключить к проекту.
#include <string.h>
Рассмотрим несколько методов из библиотеки для работы со строками.
strcpy() | Копирование строки |
strtok() | Поиск лексем (однородных слов) |
strcat() | Объединение строк |
strcmp() | Сравнение двух строк |
strstr() | Поиск подстроки в строке |
strlen() | Длина строки |
strxfrm() | Преобразование с учетом локали |
Заключение
В статье были рассмотрены методы работы с символами и строками в разных языках программирования. Несмотря на то, что алгоритм обработки везде разный, он основывается на одном принципе. Используются одни и те же коды символов, одни и те же символы экранирования. Потому даже если вы еще не определились со своим языком программирования, то вам все равно стоит изучить тему символов.