Символ буквальний
Буквальний символ - це символ в одинарних лапках. Так,
char ident1 = 'A'; char ident2 = 'b'; char ident3 = '4'; char ident4 = '6';всі різні визначення символів. Зверніть увагу, що цифра в одинарних лапках є символом, а не цілим числом.
Екранна послідовність, наприклад \ ”(див. Нижче) в одинарних лапках, є символом. Так,
char ident1 = '"';є персонажем.
Окремий символ у подвійних лапках не є символом; це рядок з одного символу. Отже, "A", "c" або "2" не є символом, а є рядком по одному символу.
Змінна char може бути перепризначена пізніше в програмі наступним чином:
char ident = 'x';ident = 'Y';
Щоб зупинити зміну символу, присвоєного ідентифікатору, пізніше в програмі, перед визначенням додайте зарезервоване слово const наступним чином:
const char ident = 'd';Змінна ident називається лише для читання.
Рядок буквальний
Рядовий літерал - це послідовність символів у подвійних лапках. Так,
char ident1 [] = "Я тебе люблю"; char ident2 [] = "Я ненавиджу 3 з вас"; char ident3 []= "ми - світ"; char ident4 [] = "Привіт Світ!";
всі різні визначення рядкових літералів. Зверніть увагу на використання подвійних лапок. Для рядка немає нічого подібного до звичайної змінної. Рядковий літерал - це масив символів, де замість розмежування за допомогою послідовність розмежовується знаком “”. Символи не відокремлюються комами. Будь-яке число, що перевищує кількість символів у рядковому літералі, може бути розміщено в квадратних дужках. Однак краще залишити квадратні дужки порожніми.
Окремий символ у подвійних лапках не є символом; це рядок з одного символу. Отже, "A", "c" або "2" - це не символ, а рядок по одному символу.
Рядова змінна не дозволяє повторно призначати повний літерал, пізніше в програмі - див. Нижче. Однак окремі символи можуть бути перепризначені - див. Нижче.
Одинарна та подвійна лапка символом або буквалом
Щоб мати єдину цитату як персонажа, зробіть щось на зразок,
char ident = '\' ';Щоб мати подвійну лапку як символ у рядковому літералі, зробіть щось на зразок,
char ident [] = "ab" cd ";Зворотна коса риса використовується в послідовності виходу, щоб уникнути конфлікту з роздільниками. Щоб мати подвійну лапку як символ, немає необхідності в зворотній косою рисі: '' '- це добре. Щоб мати єдину лапку в рядковому літералі, немає необхідності в зворотій косою рисі: "ab'cd" - це нормально.
Оскільки зворотна коса риса використовується для того, щоб уникнути символу, вона повинна бути екранована з іншою зворотною рисою, коли використовується як символ або в рядковому літералі.
Послідовність втечі
Евакуаційна послідовність є однією з:
\ '"\? \\ \ a \ b \ f \ n \ r> \ t \ vКожна послідовність входів зазвичай вводиться як символ в одинарних лапках, або як послідовність входів у подвійних лапках.
- \ ': використовується як символ одинарних лапок, в межах одинарних лапок.
- \ ”: Використовується як символ подвійних лапок у літералі.
- \? : оскільки ? є зарезервованим символом, його слід уникати буквально.
- \\: зворотну скісну риску слід уникати як символ або в рядковому літералі, щоб не призвести до якогось іншого значення.
- \ a: раз на дзвінок тривоги подається, коли використовується як символ або в рядковому літералі.
- \ b: виводиться як зворотний простір на дисплеї в рядковому літералі, знімаючи попередній символ.
- \ f: призводить до подання наступної сторінки на принтер, коли вона використовується як символ або в літералі.
- \ r: повертає курсор, де слід надрукувати наступний символ, але в межах поточного рядка.
- \ n: повертає курсор на початок наступного рядка або просто до наступного рядка, залежно від операційної системи.
- \ t: створює горизонтальну вкладку.
- \ v: створює вертикальну вкладку.
Операції з символами
Об’єднання
За визначенням, два рядкові літерали можна об’єднати з пробілом наступним чином:
char ident [] = "abc" "def";кут << ident << "\n";
Результат: abcdef . Це визначення можна розширити до більш ніж двох літералів. Примітка: твердження є визначенням, а не просто призначенням. Визначення може навіть перейти до наступного рядка з пробілом, що розділяє рядки таким чином:
char ident [] = "abc" "def"«гі»;
кут << ident << "\n";
Результат - abcdefghi.
Примітка: Символи не можна об'єднати таким чином, оскільки одинарні лапки для символу не можуть мати більше одного символу.
Оператори рівності
Однакові символи в одному і тому ж випадку рівні. Вони не рівні, якщо вони не однакові. Поміркуйте,
результат bool = 'B' == 'B';кут << result << "\n";
== означає рівне, тоді як = означає присвоєне, а не рівне. Вихід дорівнює 1 для true. Поміркуйте,
результат bool = 'B' == 'b';кут << result << "\n";
Результатом є 0 для false. Поміркуйте,
результат bool = 'b' == 'c';кут << result << "\n";
Результатом є 0 для false. Поміркуйте,
результат bool = 'B' != 'B';кут << result << "\n";
!= означає не-рівний, тоді як = означає, що призначений і не є рівним. Результатом є 0 для false. Поміркуйте,
результат bool = 'B' != 'b';кут << result << "\n";
Вихід дорівнює 1 для true. Поміркуйте,
результат bool = 'b' != 'c';кут << result << "\n";
Вихід дорівнює 1 для true.
Отже, == та != є операторами рівності.
Реляційні оператори
Для звичайних символів на C ++ у порядку зростання цифри ставляться перед великими літерами, які перед малими.
Так < will return true (1) when the left character is less than the right character. The other relational operators, <=, >, > = аналогічно пояснюються.
Рядковий літерал як об’єкт
Масив є постійним вказівником на початок певної послідовності типів даних. Подібним чином рядок є постійним вказівником на початок послідовності символів. Порівняйте наступні визначення:
int arr [] = 3, 4, 5, 6, 7;char str [] = 'w', 'o', 'm', 'a', 'n';
char stri [] = "жінка";
Перший масив - це масив ints і містить п’ять елементів. Другий і третій масиви - це масиви символів із різними назвами, але однаковою кількістю елементів. Другий і третій масиви однакові, але для своїх назв. Текстовий вміст другого масиву розмежовується фігурними дужками; символи розділяються комами, і кожен символ подається в одинарних лапках. Текстовий вміст третього масиву розмежовано подвійними лапками; символи не розділяються комами, і кожен символ не міститься в одинарних лапках. Другий і третій масиви - це два способи створення рядка, причому третій спосіб є кращим.
arr - це постійний вказівник на перший елемент свого масиву, тобто arr завжди буде вказувати на розташування, що має ціле число, 3 навіть якщо значення 3 змінено. Розмір масиву, п’ять елементів, насправді не залишається постійним. Однак кожне зі значень масиву можна змінити.
str - константний вказівник на перший елемент свого масиву, тобто str завжди буде вказувати на місце, що має символ, 'w', навіть якщо значення 'w' змінено. Розмір масиву символів із п’яти елементів насправді не залишається незмінним. Однак кожне зі значень літералу може бути змінено.
stri - це постійний вказівник на перший елемент його літералу (масиву), тобто stri завжди буде вказувати на розташування, що має символ, w навіть якщо значення w змінено. Розмір рядкового літералу (масиву), п’ять елементів, насправді не залишається незмінним. Однак кожне зі значень літералу може бути змінено.
Що є константою в масиві або рядковому літералі? Адреса пам'яті першого елемента масиву або літералу залишається як значення імені (ідентифікатора) масиву або літералу і не може бути змінена. Ну, розмір масиву або літералу насправді не залишається постійним. Кожне значення в масиві або літералі можна змінити. Наступний код показує, як був змінений четвертий елемент кожного з масивів:
int arr [] = 3, 4, 5, 6, 7;char str [] = 'w', 'o', 'm', 'a', 'n';
char stri [] = "жінка";
arr [3] = 9;
str [3] = 'e';
stri [3] = 'e';
кут << arr[3] << '\n';
кут << str << '\n';
кут << stri << '\n';
Результат:
9жінки-жінки
жінки
Зверніть увагу, що до елементів визначеного рядкового літералу, як і до третього визначення вище, можна отримати доступ за допомогою індексу масиву (індексу). Причина другого рядка результату наведена нижче.
Визначення Індекс
Зверніть увагу, що у наведених вище визначеннях для індексу немає цілого числа. Коли кількість елементів не може бути легко визначена програмістом, ціле число для індексу повинно бути опущено. Як би там не було, ціле число не повинно бути меншим за кількість елементів у масиві.
Для рядкового літералу ціле число повинно бути принаймні на 1 більше, ніж кількість символів у рядку. Це тому, що нульовий символ (\ 0) завжди додається компілятором в кінці масиву, який є рядком, розділеним подвійними лапками. Нульовий символ не додається в кінці другого масиву вище, оскільки це не офіційний рядок. Третій масив є офіційним рядком. Наступний код показує мінімальні значення індексу.
int arr [5] = 3, 4, 5, 6, 7;char str [5] = 'w', 'o', 'm', 'a', 'n';
char stri [6] = "жінка";
Для того, щоб зробити друге визначення офіційним рядком, слід додати нульовий символ наступним чином:
int arr [5] = 3, 4, 5, 6, 7;char str [6] = 'w', 'o', 'm', 'a', 'n', '\ 0';
char stri [6] = "жінка";
Результат повинен бути тепер,
9жінки
жінки
без другої "жінки". Зверніть увагу, що відповідний індекс для другого масиву - 6, а не 5, як було.
Постійні буквальні цінності
Щоб зупинити зміну будь-якого символу в подвійних лапках, призначених ідентифікатору, пізніше в програмі, перед визначенням додайте зарезервоване слово const наступним чином:
const char ident [] = "Я люблю тебе";Операції зі струнними літералами
Операції з рівності
Операторами рівності є == та != . Коли порівнюються змінні (ідентифікатори) двох рядків, то в підсумку порівнюються покажчики (адреси) літералів; це неправильно. Для порівняння рядків слід порівнювати літерали, як у наступному коді:
результат bool = "жінка" == "жінка";кут << result << '\n';
Вихід дорівнює 1 для true. Порівняння проводиться за словниковим способом, але цифри стоять першими у порядку зростання, перед великими літерами, які стоять перед малими літерами. Вихід наступного коду дорівнює 0 для false.
bool result = "жінка" != "жінка";кут << result << '\n';
Реляційні оператори зі рядковими літералами
Реляційні оператори не працюють із рядковими літералами.
Сирий рядок буквальний
Сировинний літерал рядка дозволяє відображати рядок як набраний, ігноруючи вихідні послідовності та поважаючи нові рядки. Розглянемо такий код:
char str [] = R "(abc \\ d efg hijklmn \ n "'opq
rst) ";
кут << str << '\n';
Результат:
abc \\ d efg hijklmn \ n "'opq
перший
У коді сирий літеральний рядок починається з R, а потім ”і ( . Він закінчується на) і “.
Типи основних рядків C ++
char
Тип char - оригінальний тип C ++ і зазвичай зберігає символ у 8 бітів.
char16_t
Це зберігає символ у 16 бітах.
char32_t
Це зберігає символ у 32 біти.
wchar_t
char16_t та char32_t - це широкі символи. wchar_t - це широкий символ, який є власністю та визначається реалізацією.
Висновок
Буквальний символ - це одиничний символ у одинарних лапках. Екранна послідовність - це символ, який також може бути в одинарних лапках. Рядовий літерал - це послідовність символів у подвійних лапках. Рядковий літерал - це масив символів, які закінчуються на \ 0. Оператори рівності та реляції працюють з літералами символів. Оператори рівності працюють із рядковими літералами, але реляційні оператори не працюють із рядковими літералами. Ідентифікатори символів можна використовувати для порівняння, але ідентифікатори рядків не слід використовувати для порівняння. Сировинний літеральний рядок дозволяє відображати рядок як набраний, ігноруючи вихідні послідовності та поважаючи нові рядки.
Кріс