char
. В действительности, char
представляет из себя число, которое при выводе на экран
преобразуется в картинку символа. На уровне компилятора работа идет уже с обычными числами. Таким образом, определена таблица (ASCII), в которой каждому символу сопоставлено число.
Таблицу ASCII символов можно посмотреть в материалах Д. Кириенко здесь. Возможность работы с числами позволяет
нам выполнять такие операции.
char c = 'A'; char d = c + 1; cout << d << endl; // выведет 'B' (см. таблицу), так как после символа 'A' следует символ 'B'.Другой пример:
char a = '8'; int b = (int)(a - '0'); // b = 8 так у '8' номер 58, а у '0' - 48.Вычитание(int)
приводит значениеchar
кint
'0'
часто используется, если нужно переводить строку в число или наоборот.'\n'
. Для понимания всей
глубины языка С с остальными символами тоже стоит ознакомиться.cin
, так как он пропускает
при вводе пробельные символы. Существует несколько способов решить эту проблему, конкретно для символов существует функция getchar()
. Для ее использования надо
подключить библиотеку cstdio
. Функция getchar()
берет ровно один символ из потока ввода. Пример:
#include <iostream> #include <cstdio> ... char c; c = getchar(); // если на ввод дано ' ', то в отличии от cin, здесь проблем не возникнет. с = ' ' ...
char
. Для таких строк не существует оператора присваивания:
char s[10]; s = "Hello"; // ошибка, программа не скомпилируетсяПрисваивать можно только во время инициализации переменной:
char s[10] = "Hi"; // можно так писатьТак же нельзя присваивать строки друг другу:
char s[10] = "Hello"; char s2[10] = s; // это не работаетЕдинственный способ присваивания - это указатели. Но это крайне проблематично, так как при изменении самой строки, указатели будут указывать на ее новое значение, а не старое. (что конечно неудобно).
char s[10] = "Hi"; char *s2 = s; // при изменении s, s2 тоже меняется!Единственный оставшийся способ - это посимвольное присваивание, но это слишком долго. Кроме того, тяжело работать со строкой, когда нельзя узнать даже ее длину...
'\0'
). Он используется как метка конца строки. К примеру, если нужно пробежаться по всем
символам строки, то можно писать так:
char s[100] = "Hello!"; int i = 0; while (s[i] != '\0'){ ... i++; }Для упрощения использования строк в языке
С++
существует особый класс string
. Для этого нужно подключить библиотеку string
.
Такие строки намного проще в использовании: для них определены операторы сложения, присваивания, не нужно заботиться о длине строки и о наличии "нулевого" символа в конце.
Также определены команды string::size()
и string::resize()
и другие. Вот программа с примером использования строк:
#include <string> #include <iostream> using namespace std; int main(){ string s1, s2; s1 = "Hello, "; s2 = "world!"; string s = s1 + s2; // s = "Hello, world!" for (int i = 0; i < s.size(); i++){ // пример использования string::size(); cout << s[i]; }// выведет всю строку return 0; }Метод
string::size()
возвращает длину строки.string::resize()
используется для изменения длины строки. Об использовании его и других методов желательно читать документации
здесь. string
определен оператор cin
, но тогда в строку будет записано всё до первого символа пробела или
перевода строки. Пример:
string s; cin >> s; // на ввод дается "Hello, world!" cout << s << endl; // выведет "Hello,"В таких случаях, иногда бывает удобнее пользоваться
getline()
. Для этого не нужно подключать никаких библиотек. Функция getline()
возвращает все симолы из потока ввода до первого конца строки. Синтаксис команды такой: getline(<Поток ввода>, <имя переменной>);
. Пример:
string s; getline(cin, s); // на ввод дается "Hello, world!" cout << s << endl; // выведет "Hello, world!"