Раздел: Статьи / С/С++ / Ошибки программирования /

Строки и символы в Си Плюс Плюс

Все способы изучить С++ Все способы изучить С++

Начинающие программисты даже не догадываются о том, какой огромный пласт в этой области скрыт от их глаз, и чего многие из новичков не увидят никогда, потому что это тёмная сторона программирования - чистый исходный код системного уровня… Подробнее...

В отличие от Паскаля, где и строки и символы заключаются в одинарные кавычки, в С++, как всегда, всё более интересно. Строки в С++ заключаются в двойные кавычки, а вот символы – в одинарные.

Эту ошибку тоже совершают практически все новички – то есть пытаются заключить символ в двойные кавычки, или строку - в одинарные.

Эту ошибку нельзя назвать очень страшной – компилятор её легко находит и выдаёт сообщение. Однако знать об этом надо.

Вот пример программы, где показано, как можно записывать символы и строки в исходном коде, а как нельзя:

  
#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);


Как стать программистом 2.0 Как стать программистом 2.0

Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки… Подробнее...

Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su

Яндекс.Метрика