Раздел: Статьи / С/С++ / Ошибки программирования /
Строки и символы в Си Плюс Плюс
Все способы изучить С++
Начинающие программисты даже не догадываются о том, какой огромный пласт в этой области скрыт от их глаз, и чего многие из новичков не увидят никогда, потому что это тёмная сторона программирования - чистый исходный код системного уровня… Подробнее... |
В отличие от Паскаля, где и строки и символы заключаются в одинарные кавычки, в С++, как всегда, всё более интересно. Строки в С++ заключаются в двойные кавычки, а вот символы – в одинарные.
Эту ошибку тоже совершают практически все новички – то есть пытаются заключить символ в двойные кавычки, или строку - в одинарные.
Эту ошибку нельзя назвать очень страшной – компилятор её легко находит и выдаёт сообщение. Однако знать об этом надо.
Вот пример программы, где показано, как можно записывать символы и строки в исходном коде, а как нельзя:
#include#include using namespace std; int main(int argc, char *argv[]) { char Sym; cout << 'A' << endl; //Вывод символа cout << "A" << endl; //Вывод строки Sym = 'A'; //Так можно Sym = "A"; //А так нельзя system("PAUSE"); return EXIT_SUCCESS; }
А теперь ещё один пример:
char ch1; int ch2; ch1 = 'A'; ch2 = 'A'; cout << "ASCII-code of symbol " << ch1 << " = " << ch2 << "\n";
В результате программа выведет на экран следующее сообщение:
ASCII-code of symbol А = 65
То есть мы объявляем две переменных разного типа. И в каждую из этих переменных помещаем один и тот же символ. Однако на экран в одном случае выводится буква, а в другом - число (ASCII-код этой буквы).
А всё потому, что в первом случае переменная имеет тип char (который является одновременно целочисленным и символьным), а во втором - переменная имеет «чисто» числовой тип данных.
При этом в математических выражениях с типом char результат будет целочисленным, а при выводе на экран - символьным.
Вот такая путаница. И это не единственная «заморочка» С++.
Символы в программе можно записать двумя способами.
‘A’ - символ в одинарных кавычках. 65 - код символа (обычное число). Формат записи числа может быть любым, принятым в С++ (см. раздел «3.1.1.1. Целые типы» в книге Основы С++).
То есть вместо нашего кода:
ch1 = 'A'; ch2 = 'A';
с таким же успехом можно записать:
ch1 = 65; ch2 = 65;
Ещё один момент: как известно, ASCII-код - это набор числовых кодов и сопоставленных с ними символов в диапазоне 0...255. Однако тип char имеет диапазон -128...127.
И если вместо английской буквы А в нашем примере мы укажем русскую букву я, вот так:
ch1 = 'я';
ch2 = 'я';
то на экран будет выведена строка:
ASCII-code of symbol я = -17
Но ведь такого кода в таблице ASCII нет!
Ну нет и нет. Это уже проблемы тех, кто создаёт компиляторы С++. Ну а если вам надо, чтобы программа выводила правильный код, то придётся сделать так:
ch2 = 'я' + 256;
Попробуйте сами понять - почему.
Символ ‘я’ будет выводиться на экран и код его будет равен -17 только в том случае, если у вас русифицированная версия компилятора С++. О русификации компилятора Dev-C++ рассказано в книге Основы С++.
Возможно, у вас возникнет вопрос, как же всё-таки вывести на экран не символ, а его код. То есть числовое значение, которое хранится в переменной типа char. Сделать это можно так:
char c = 'A'; cout << int(c);
В этом примере на экран будет выведена не буква А, а число 65. Подробнее о преобразовании типов как-нибудь в другой раз.
Аналогично можно вывести на экран символ, зная его ASCII-код:
int x = 65; cout << char(x);
Подписаться на канал в YouTube
Вступить в группу "Основы программирования" Подписаться на рассылки по программированию |
Как стать программистом 2.0
Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки… Подробнее... |