Символы и строки
До сих пор мы работали только с числовыми данными, как целыми, так и действительными. Но очень часто (если речь идет не о сугубо научных рассчетах) приходится оперировать с текстовой информацией. В этом листочке содержится основная информация о принципах работы с символами и текстами.
Символьный тип char
Любой текст состоит из символов. Символ — это некоторый значок, изображение. Один и тот же символ можно записать по-разному, например, два человека по-разному напишут от руки букву “A”, и даже в компьютерном представлении одна и та же буква будет выглядеть по-разному, если ее отображать разными шрифтами, при этом это будет все равно один и тот же символ. Верно и другое: разные символы могут быть записаны одинаково, например, вот две разные буквы, одна — латинского алфавита, другая — русского: “A” и “А”. Несмотря на то, что они выглядят одинаково, удобней считать их разными символами.
Итак, способ хранения текстовой информации в компьютере не связан напрямую с изображением этого текста. Вместо символов хранятся их номера — числовые коды, а вот то, как выглядит символ с данным числовым кодом на экране напрямую зависит от того, какой используется шрифт для отображения символов. При этом, разумеется, следовало бы договориться о единообразном способе кодирования символов числовыми кодами, иначе текст, записанный на одном компьютере, невозможно будет прочитать на другом компьютере.
Первоначально договорились под кодирование одного символа отвести один байт, то есть 8 бит информации. Таким образом можно было закодировать 256 различных значений, то есть в записи текста можно использовать 256 различных символов. Этого достаточно, чтобы отобразить все символы латинского алфавита, цифры, знаки препинания и некоторые другие символы. Стандарт, указывающий, какие числовые коды соответствуют каким основным символам, называется ASCII. В таблицу ASCII включены символы с кодами от 0 до 127, то есть ASCII — это семибитный код. Вот так выглядит таблица ASCII:
Char Dec Oct Hex | Char Dec Oct Hex | Char Dec Oct Hex | Char Dec Oct Hex ------------------------------------------------------------------------------------- (nul) 0 0000 0x00 | (sp) 32 0040 0x20 | @ 64 0100 0x40 | ` 96 0140 0x60 (soh) 1 0001 0x01 | ! 33 0041 0x21 | A 65 0101 0x41 | a 97 0141 0x61 (stx) 2 0002 0x02 | " 34 0042 0x22 | B 66 0102 0x42 | b 98 0142 0x62 (etx) 3 0003 0x03 | # 35 0043 0x23 | C 67 0103 0x43 | c 99 0143 0x63 (eot) 4 0004 0x04 | $ 36 0044 0x24 | D 68 0104 0x44 | d 100 0144 0x64 (enq) 5 0005 0x05 | % 37 0045 0x25 | E 69 0105 0x45 | e 101 0145 0x65 (ack) 6 0006 0x06 | & 38 0046 0x26 | F 70 0106 0x46 | f 102 0146 0x66 (bel) 7 0007 0x07 | ' 39 0047 0x27 | G 71 0107 0x47 | g 103 0147 0x67 (bs) 8 0010 0x08 | ( 40 0050 0x28 | H 72 0110 0x48 | h 104 0150 0x68 (ht) 9 0011 0x09 | ) 41 0051 0x29 | I 73 0111 0x49 | i 105 0151 0x69 (nl) 10 0012 0x0a | * 42 0052 0x2a | J 74 0112 0x4a | j 106 0152 0x6a (vt) 11 0013 0x0b | + 43 0053 0x2b | K 75 0113 0x4b | k 107 0153 0x6b (np) 12 0014 0x0c | , 44 0054 0x2c | L 76 0114 0x4c | l 108 0154 0x6c (cr) 13 0015 0x0d | - 45 0055 0x2d | M 77 0115 0x4d | m 109 0155 0x6d (so) 14 0016 0x0e | . 46 0056 0x2e | N 78 0116 0x4e | n 110 0156 0x6e (si) 15 0017 0x0f | / 47 0057 0x2f | O 79 0117 0x4f | o 111 0157 0x6f (dle) 16 0020 0x10 | 0 48 0060 0x30 | P 80 0120 0x50 | p 112 0160 0x70 (dc1) 17 0021 0x11 | 1 49 0061 0x31 | Q 81 0121 0x51 | q 113 0161 0x71 (dc2) 18 0022 0x12 | 2 50 0062 0x32 | R 82 0122 0x52 | r 114 0162 0x72 (dc3) 19 0023 0x13 | 3 51 0063 0x33 | S 83 0123 0x53 | s 115 0163 0x73 (dc4) 20 0024 0x14 | 4 52 0064 0x34 | T 84 0124 0x54 | t 116 0164 0x74 (nak) 21 0025 0x15 | 5 53 0065 0x35 | U 85 0125 0x55 | u 117 0165 0x75 (syn) 22 0026 0x16 | 6 54 0066 0x36 | V 86 0126 0x56 | v 118 0166 0x76 (etb) 23 0027 0x17 | 7 55 0067 0x37 | W 87 0127 0x57 | w 119 0167 0x77 (can) 24 0030 0x18 | 8 56 0070 0x38 | X 88 0130 0x58 | x 120 0170 0x78 (em) 25 0031 0x19 | 9 57 0071 0x39 | Y 89 0131 0x59 | y 121 0171 0x79 (sub) 26 0032 0x1a | : 58 0072 0x3a | Z 90 0132 0x5a | z 122 0172 0x7a (esc) 27 0033 0x1b | ; 59 0073 0x3b | [ 91 0133 0x5b | < 123 0173 0x7b (fs) 28 0034 0x1c | < 60 0074 0x3c | \ 92 0134 0x5c | | 124 0174 0x7c (gs) 29 0035 0x1d | = 61 0075 0x3d | ] 93 0135 0x5d | >125 0175 0x7d (rs) 30 0036 0x1e | > 62 0076 0x3e | ^ 94 0136 0x5e | ~ 126 0176 0x7e (us) 31 0037 0x1f | ? 63 0077 0x3f | _ 95 0137 0x5f | (del) 127 0177 0x7f
При этом символы с кодами, меньшими 32 — это специальные управляющие символы, которые не отображаются на экране. Например, для того, чтобы обозначить конец строки в системе Linux используется один символ с кодом 10, а в системе Windows — два подряд идущих символа с кодами 13 и 10, символы с кодами 48-57 соответствуют начертанию арабских цифр (обратите внимание, символ с кодом 0 — это вовсе не символ, отображающийся на экране, как “0”), символы с кодами 65-90 — заглавные буквы буквы латинского алфавита, а если к их кодам прибавить 32, то получатся строчные буквы латинского алфавита. В промежутках между указанными диапазонами находятся знаки препинания, математические операции и прочие символы.
Но в ASCII-таблицы нет русских букв! А также нет букв сотен других национальных алфавитов. Первоначально для отображения букв национальных алфавитов использовали вторую половину возможного значения байта, то есть символы с кодами от 128 до 255. Это приводило к множеству проблем, например, поскольку 128 значений явно недостаточно для того, чтобы отобразить символы всех национальных алфавитов (даже недостаточно для того, чтобы отобразить символы одного алфавита, например, китайской письменности. Поэтому в настоящее время для кодирования символов используется стандарт Unicode, последняя версия 5.2 которого (октябрь, 2009) включает 107361 различный символ. Естественно, для кодирования Unicode-символов недостаточно одного байта на символ, поэтому используются многобайтовые кодировки (для представления одного символа необходимо несколько байт).
Мы будем работать только с символами ASCII, поэтому для представления одного символа будет использоваться только один байт.
В языке C++ для хранения однобайтового символа используется тип данных char . Переменную типа char можно рассматривать двояко: как целое число, занимающее 1 байт и способное принимать значения от -128 до 127 (тип signed char , есть также беззнаковая модификация unsigned char , принимающая значения от 0 до 255) и как один символ текста. Само по себе определение char может оказаться как знаковым, так и беззнаковым, в зависимости от операционной системы и компилятора. Поэтому использовать тип char не рекомендуется, лучше явно указывать будет ли он знаковым ( signed ) или беззнаковым ( unsigned ).
Как и целые числа, данные типа char можно складывать, вычитать, умножать и даже делить. Но если операции умножения и деления, как правило, бессмысленны, то сложение и вычитание вполне осмысленно. Например, если к символу ‘A’ прибавить 1, то получится символ ‘B’ , а если вычесть 1, то получится символ ‘@’ . То есть в следующем фрагменте кода на экран будет выведена буква B .
char c = 'A'; c = c + 1; coutВ этом примере видно, что переменным типа char можно присваивать значения, равные ASCII кодам символов, если эти символы заключать в кавычки. То есть запись 'A' будет соответствовать символу A , или ASCII коду 65.
Также в этом примере видно, что при выводе на экран переменной типа char мы увидим изображение этого символа. Как же узнать значение ASCII-кода символа? Его не нужно узнавать, сам символ - это и есть ASCII-код. А как его вывести на экран? Очень просто - нужно преобразовать значение величины типа char к значению типа int . Например, вот так:
coutИмя типа, записанное в скобочках перед значением, это и есть оператор преобразования значения к указанному типу.
Аналогично, при считывании переменной типа char через поток cout , из потока ввода считывается один символ, переменная получает значение, равное его ASCII-коду. Например, если написать программу, содержающую строчку
char c; cin >> c;запустить ее, ввести символ A (безо всяких кавычек!), то в переменную c будет записано значение 65 - ASCII-код символа A .
Переменным типа char можно и явно присваивать числовые значения. Например, можно сделать так:
#include using namespace std; int main() < unsigned char c = 'A'; cout << c << " " << (int) c << endl; c = 126; // char можно присвоить и числовое значение cout
Эта программа выведет две строки: “ A 65 ” и “ ~ 126 ”, то есть символы с ASCII-кодами 65 (A) и 126 (~) и сами ASCII-коды.
Организовать последовательное посимвольное считывание всего входного потока можно при помощи цикла while :
#include using namespace std; int main() < char c; while (cin >> c) // Цикл пока считывание успешно < // Делаем необходимые действия, // обрабатывая символ c >return 0; >В этом примере программа будет посимвольно считывать входной поток (по умолчанию — ввод с клавиатуры), пока не встретит признак конца файла. Для того, чтобы сообщить программе о завершении входного потока при вводе с клавиатуры необходимо нажать клавиши Ctrl-d в системе Linux и Ctrl-z в системе Windows.
Эта программа при считывании данных будет игнорировать символы–разделители: пробелы, символы новой строки и табуляции. Если нужно, чтобы в переменную c считывались все символы, в том числе и разделители, то необходимо для потока ввода cin установить манипулятор noskipws при помощи инструкции:
cin >> noskipws;>S; // считать строку S с клавиатуры --> >S1>>S2>>S3; --> >S) // Цикл до тех пор, пока считывание успешно --> >. -->
Строки в языке C++
Текстовая строка - это последовательность символов. Поскольку символы в строке пронумерованы, то естественным представлением для строки был бы массив символов. Так строки и представлялись в языке C - строкой считался массив символов, а для обозначения конца строки использовался символ с ASCII-кодом 0, что позволяло хранить строки переменной длины (то есть в массиве char[n] можно было хранить строки любой длины, не превосходящей n-1 . Такой способ хранения строк порождал ряд неудобств: любая строка была ограничена по длине размером массива, а чтобы вычислить длину строки необходимо было пройти по всей строке до появления нулевого символа, то есть определение длины строки требует количество операций, пропорциональное этой длине.
В языке C++ для представления строк существует более совершенный тип данных string , в основе которого лежит такой же массив символов, завершающийся нулевым символом, но содержащий еще ряд дополнительных возможностей. Для работы со строками языка C++ необходимо в начале программы подключить описание типа string , которое находится в одноименном файле:
#include
Переменная для хранения строковых данных объявляется так:
string S;Присвоить строковой переменной некоторое константное значение можно так:
S = "Hello, world!";С записью строк в тексте программы в кавычках мы уже встречались, когда выводили текст в поток cout . Обратите внимание - константы типа char записываются в одинарных кавычках, а строки - в двойных кавычках. В частности, 'A' - это символ, а "A" - это строка, состоящая из одного символа. Поэтому переменной типа char нельзя присвоить значение "A" , поскольку они имеют несовместимые типы данных.
По сути, переменная типа string является массивом символов и с каждым символом этой строки можно работать по-отдельности, обращаясь к ним по индексу, как к элементам массива. Например:
coutДля определения длины строки есть метод size() , применяемый к строке. Он возвращает целое число - количество символов в строке. Его можно использовать так:
string S; cin >> S; coutДля начала нам понадобится две операции над строками: сложение двух строк и изменение размера строки.
Основная операция над строками - сложение: например, при сложении строк "Hello, " и "world!" получится строка "Hello, world!" . Такая операция над строками называется .
Вот пример использования конкатенации строк:
string S, S1, S2; // Объявление трех строк cout > S1; // Считали строку S1 S2 = "Hello, " // Присвоили строке значение S = S2 + S1; // Использование конкатенации coutДругая операция - изменение размера строки. Для этого существует метод resize , который применяется к строке. У метода resize есть две формы записи: с одним и с двумя параметрами. Если он вызывается с одним параметром, то этот параметр задает новую длину строки. Например, так:
string S = "abcdefg" S.resize(3); coutВторой параметр метода resize задает символ, которым будут заполнены символы в строке, если размер строки увеличивается в результате изменения размера. Например:
string S = "abc" S.resize(6, 'd'); coutПри считывании строк из входного потока считываются все символы, кроме символов–разделителей (пробелов, табуляций и новых строк), которые являются границами между строками. Например, если при выполнении следующей программы
string S1, S2, S3; // объявили 3 строки cin>>S1>>S2>>S3;ввести текст ‘ Мама мыла раму ’ (с произвольным количеством пробелов между словами), то в массив S1 будет записана строка "Мама" , в S2 — "мыла" , в S3 — "раму" .
Таким образом, организовать считывание всего файла по словам, можно следующим образом:
string s; while (cin >> s) // Цикл пока считывание успешно < // Делаем необходимые действия >Если нужно считать строку со всеми пробелами, то необходимо использовать функцию getline следующим образом:
string S; getline(cin, S);В данном случае если запустить эту программу и ввести строку "Мама мыла раму" , то именно это значение и будет присвоено строке S . Считать же весь входной поток по строкам можно при помощи следующего кода:
string s; while (getline(cin, S)) // Цикл пока считывание успешно < // Делаем необходимые действия >Что означает символ: в с#?
Подскажите пожалуйста, что означает символ двоеточие в этом участке кода?
- Вопрос задан более трёх лет назад
- 353 просмотра
Комментировать
Решения вопроса 1
Владимир Коротенко @firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Вызов другого конструктора в данном случае, или объявление наследуемых классов интерфейсов
Ответ написан более трёх лет назад
Комментировать
Нравится 2 Комментировать
Ответы на вопрос 1
Тимур Покровский @Makaroshka007
Символы и строки в С++
Символ – элементарная единица, некоторый набор которых несет определенный смысл. В языке программирования С++ предусмотрено использование символьных констант. Символьная константа – это целочисленное значение (типа int ) представленное в виде символа, заключённого в одинарные кавычки, например 'a' . В таблице ASCII представлены символы и их целочисленные значения.
// объявления символьной переменной char symbol = 'a'; // где symbol – имя переменной типа char // char – тип данных для хранения символов
Строки в С++ представляются как массивы элементов типа char , заканчивающиеся нуль-терминатором \0 называются С строками или строками в стиле С.
\0 — символ нуль-терминатора.
Символьные строки состоят из набора символьных констант заключённых в двойные кавычки. При объявлении строкового массива необходимо учитывать наличие в конце строки нуль-терминатора, и отводить дополнительный байт под него.
// пример объявления строки char string[10]; // где string – имя строковой переменной // 10 – размер массива, то есть в данной строке может поместиться 9 символов , последнее место отводится под нуль-терминатор.
Строка при объявлении может быть инициализирована начальным значением, например, так:
char string[10] = "abcdefghf";
Если подсчитать кол-во символов в двойных кавычках после символа равно их окажется 9, а размер строки 10 символов, последнее место отводится под нуль–терминатор, причём компилятор сам добавит его в конец строки.
// посимвольная инициализация строки: char string[10] = ; // десятый символ это нуль-терминатор.
При объявлении строки не обязательно указывать её размер, но при этом обязательно нужно её инициализировать начальным значением. Тогда размер строки определится автоматически и в конец строки добавится нуль-терминатор.
//инициализация строки без указания размера char string[] = "abcdefghf"; //всё то же самое только размер не указываем.
Строка может содержать символы, цифры и специальные знаки. В С++ строки заключаются в двойные кавычки. Имя строки является константным указателем на первый символ. Разработаем программу, с использованием строк.
// symbols.cpp: определяет точку входа для консольного приложения. #include "stdafx.h" #include using namespace std; int main(int argc, char* argv[]) < char string[] = "this is string - "; // объявление и инициализация строки cout
// symbols.cpp: определяет точку входа для консольного приложения. #include #include using namespace std; int main(int argc, char* argv[]) < char string[] = "this is string - "; // объявление и инициализация строки cout
В строке 12 с помощью функции gets() считаются все введённые символы с пробелами до тех пор, пока во вводимом потоке не встретится код клавиши enter . Если использовать операцию cin то из всего введённого считается последовательность символов до первого пробела (см. Рисунок 1).
CppStudio.com
Enter the string: CppStudio.com this is string - CppStudio.com Для продолжения нажмите любую клавишу . . .
Рисунок 1 — Символы и строки
Функция | Пояснение |
---|---|
strlen(имя_строки) | определяет длину указанной строки, без учёта нуль-символа |
Копирование строк | |
strcpy(s1,s2) | выполняет побайтное копирование символов из строки s2 в строку s1 |
strncpy(s1,s2, n) | выполняет побайтное копирование n символов из строки s2 в строку s1 . возвращает значения s1 |
Конкатенация строк | |
strcat(s1,s2) | объединяет строку s2 со строкой s1 . Результат сохраняется в s1 |
strncat(s1,s2,n) | объединяет n символов строки s2 со строкой s1 . Результат сохраняется в s1 |
Сравнение строк | |
strcmp(s1,s2) | сравнивает строку s1 со строкой s2 и возвращает результат типа int : 0 –если строки эквивалентны, >0 – если s1s2 С учётом регистра |
strncmp(s1,s2,n) | сравнивает n символов строки s1 со строкой s2 и возвращает результат типа int : 0 –если строки эквивалентны, >0 – если s1s2 С учётом регистра |
stricmp(s1,s2) | сравнивает строку s1 со строкой s2 и возвращает результат типа int : 0 –если строки эквивалентны, >0 – если s1s2 Без учёта регистра |
strnicmp(s1,s2,n) | сравнивает n символов строки s1 со строкой s2 и возвращает результат типа int : 0 –если строки эквивалентны, >0 – если s1s2 Без учёта регистра |
Обработка символов | |
isalnum(c) | возвращает значение true , если с является буквой или цифрой, и false в других случаях |
isalpha(c) | возвращает значение true , если с является буквой, и false в других случаях |
isdigit(c) | возвращает значение true , если с является цифрой, и false в других случаях |
islower(c) | возвращает значение true , если с является буквой нижнего регистра, и false в других случаях |
isupper(c) | возвращает значение true , если с является буквой верхнего регистра, и false в других случаях |
isspace(c) | возвращает значение true , если с является пробелом, и false в других случаях |
toupper(c) | если символ с , является символом нижнего регистра, то функция возвращает преобразованный символ с в верхнем регистре, иначе символ возвращается без изменений. |
Функции поиска | |
strchr(s,c) | поиск первого вхождения символа с в строке s . В случае удачного поиска возвращает указатель на место первого вхождения символа с . Если символ не найден, то возвращается ноль. |
strcspn(s1,s2) | определяет длину начального сегмента строки s1 , содержащего те символы, которые не входят в строку s2 |
strspn(s1,s2) | возвращает длину начального сегмента строки s1 , содержащего только те символы, которые входят в строку s2 |
strprbk(s1,s2) | Возвращает указатель первого вхождения любого символа строки s2 в строке s1 |
Функции преобразования | |
atof(s1) | преобразует строку s1 в тип double |
atoi(s1) | преобразует строку s1 в тип int |
atol(s1) | преобразует строку s1 в тип long int |
Функции стандартной библиотеки ввода/вывода | |
getchar(с) | считывает символ с со стандартного потока ввода, возвращает символ в формате int |
gets(s) | считывает поток символов со стандартного устройства ввода в строку s до тех пор, пока не будет нажата клавиша ENTER |
Разработаем несколько программ, используя функции для работы со строками и символами.
Копирование строк
// str_cpy.cpp: определяет точку входа для консольного приложения. #include "stdafx.h" #include using namespace std; int main(int argc, char* argv[]) < char s2[27] = "Counter-Strike 1.6 forever"; // инициализация строки s2 char s1[27]; // резервируем строку для функции strcpy() cout
// str_cpy.cpp: определяет точку входа для консольного приложения. #include #include using namespace std; int main(int argc, char* argv[]) < char s2[27] = "Counter-Strike 1.6 forever"; // инициализация строки s2 char s1[27]; // резервируем строку для функции strcpy() cout
В строках 9, 10 создаём строковые массивы на 27 символов, словосочетание "Counter-Strike 1.6 forever" содержит 26 символов, последнее место в массиве займет нуль-символ. В строке 11 функция strcpy(s1,s2) копирует значение строки s2 в строку s1 и возвращает указатель на строку s1 . Если строка s1 будет меньше строки s2 , то скопируется то количество символов, которое вместится в строку s2 . Строка 10 всего лишь показывает, что в строке s1 содержится скопированное значение. В строке 14 функция strncpy(s3, s2, sizeof(s3)) выполняет копирование 7 символов строки s2 в строку s3 (см. Рисунок 2).
CppStudio.com
strcpy(s1,s2) = Counter-Strike 1.6 forever s1= Counter-Strike 1.6 forever CounterCounter-Strike 1.6 forever Для продолжения нажмите любую клавишу . . .
Рисунок 2 — Символы и строки
Конкатенация строк
Использование функций strcat() и strncat() , для объединения строк, то есть для их конкатенации.
// str_cat.cpp: определяет точку входа для консольного приложения. #include "stdafx.h" #include using namespace std; int main(int argc, char* argv[]) < char s1[30] = "I am "; char s2[] = "programmer on the C++. "; cout
// str_cat.cpp: определяет точку входа для консольного приложения. #include #include using namespace std; int main(int argc, char* argv[]) < char s1[30] = "I am "; char s2[] = "programmer on the C++. "; cout
В строке 11 функция strcat(s1,s2) объединяет строки s1 и s2 , результат сохраняется в строке s1 . По этому при объявлении строки s1 её размер установлен на 30 символов. В строке 13 функция strncat(s3,s2,10) объединяет 10 символов из строки s2 (как раз помещается слово programmer ) со строкой s3 , результат сохраняется в строке s3. И по этому размер строки s3 также задан фиксировано (см. Рисунок 3).
CppStudio.com
I am programmer on the C++. I am a good programmer. Для продолжения нажмите любую клавишу . . .
Рисунок 3 — Символы и строки
Сравнение строк
Рассмотрим работу функции strcmp() , остальные функции используются аналогично, так что каждую рассматривать не будем.
// str_cmp.cpp: определяет точку входа для консольного приложения. #include "stdafx.h" #include #include using namespace std; int main(int argc, char* argv[]) < char s1[] = "www.cppstudio.com"; char s2[] = "http://www.cppstudio.com"; cout " " s1 -> " s1 system("pause"); return 0; >
// str_cmp.cpp: определяет точку входа для консольного приложения. #include #include #include using namespace std; int main(int argc, char* argv[]) < char s1[] = "www.cppstudio.com"; char s2[] = "http://www.cppstudio.com"; cout " " s1 -> " s1 return 0; >
В строках 12, 13, 14 функция strcmp() выполняет сравнение строк, в различном порядке, таким образом были рассмотрены все возможные варианты работы данной функции. В первом случае строку s1 сравнивали с самой собой соответственно и результат равен 0. Во втором случае строка s1 оказалась меньше строки s2 поэтому результат равен 1. В третьем случае строка s1 по-прежнему меньше строки s2 , но мы поменяли эти строки местами, таким образом, порядок параметров функции изменился и результат стал равен -1 (см. Рисунок 4).
CppStudio.com
s1 == s1 -> 0 s1 < s2 ->1 s2 > s1 -> -1 Для продолжения нажмите любую клавишу . . .
Рисунок 4 — Символы и строки
Обработка символов
Функции из данной группы умеют различать, к какому типу знаков относятся те или иные символы, например буквы, цифры, специальные знаки.
// issss.cpp: определяет точку входа для консольного приложения. #include "stdafx.h" #include using namespace std; int main(int argc, char* argv[]) < char symbol = 'd'; // буква char digit = '9'; // цифра char space = ' '; // пробел char character = '#'; // знак // функция isalnum() проверяет является ли её аргумент буквой или цифрой cout << symbol << " - it is digit or alpha?: "; isalnum(symbol) ? cout << "true\n": cout << "false\n"; // функция isalpha() проверяет является ли её аргумент буквой cout << symbol << " - it is alpha?: "; isalpha(symbol) ? cout << "true\n": cout << "false\n"; // функция isdigit() проверяет является ли её аргумент цифрой cout << digit << " - it is digit?: "; isdigit(digit) ? cout << "true\n": cout << "false\n"; // функция isspace() проверяет является ли её аргумент пробелом cout << space << " - it is space?: "; isspace(space) ? cout << "true\n": cout << "false\n"; // функция islower() проверяет является ли её аргумент буквой нижнего регистра cout << symbol << " - it is lower alpha?: "; islower(symbol) ? cout << "true\n": cout << "false\n"; // функция isupper() проверяет является ли её аргумент буквой верхнего регистра cout // issss.cpp: определяет точку входа для консольного приложения. #include using namespace std; int main(int argc, char* argv[]) < char symbol = 'd'; // буква char digit = '9'; // цифра char space = ' '; // пробел char character = '#'; // знак // функция isalnum() проверяет является ли её аргумент буквой или цифрой cout << symbol << " - it is digit or alpha?: "; isalnum(symbol) ? cout << "true\n": cout << "false\n"; // функция isalpha() проверяет является ли её аргумент буквой cout << symbol << " - it is alpha?: "; isalpha(symbol) ? cout << "true\n": cout << "false\n"; // функция isdigit() проверяет является ли её аргумент цифрой cout << digit << " - it is digit?: "; isdigit(digit) ? cout << "true\n": cout << "false\n"; // функция isspace() проверяет является ли её аргумент пробелом cout << space << " - it is space?: "; isspace(space) ? cout << "true\n": cout << "false\n"; // функция islower() проверяет является ли её аргумент буквой нижнего регистра cout << symbol << " - it is lower alpha?: "; islower(symbol) ? cout << "true\n": cout << "false\n"; // функция isupper() проверяет является ли её аргумент буквой верхнего регистра cout
В данной программе по использованию функций вопросов возникать не должно. Функции сами по себе возвращают целочисленное значение, положительное – true , отрицательное или ноль – false . В формировании результата работы функций участвовал тернарный оператор, то есть выводилось сообщение true или false без всяких числовых значений (см. Рисунок 5).
CppStudio.com
d - it is digit or alpha?: true d - it is alpha?: true 9 - it is digit?: true - it is space?: true d - it is lower alpha?: true d - it is upper alpha?: false Для продолжения нажмите любую клавишу . . .
Рисунок 5 — Символы и строки
Итак, мы рассмотрели больше половины функций, из тех, что есть в таблице. Остальные функции используются аналогично, так что по ним примеры программ разбирать не будем.
Дата: 25.08.2012
Поделиться:
- ←Литералы в программировании
- Кириллица в консоли→
Комментарии
CraigWew
CraigWew
CraigWew
12.04.2018 п»їThe Importance of Establishing Rapport With the Customer in Real Estate and General Sales The importance of establishing rapport with the customer.
Establishing rapport with a customer has to be earned and must be approached as a very integral part of the sales process.
In order to get a customer and yourself to relate on a real one to one basis, involves two things!
First, you will have to be aware and be there! Second you must understand that there are two different stages that will occur during this process.
A-Be there-what does that mean?
o Most people don’t really listen to another person as they talk. Generally they are so busy formulating their next answer or statement that they couldn’t possibly really listen.
o If this sounds like you, being there means shut up and listen!
B-What is the first or initial stage?
o Generally you have just a few minutes to establish yourself in the customers mind as someone they want to deal with.
o When in doubt it is best to first ask questions that will draw them out and talk about themselves.
o It is also always safe to appear as a professional-I don’t mean stoic or dry, but someone who knows what they are doing and talks and looks the part.
C-Other stages
o As time goes on, through conversation and questions they will have, you will either establish your ability or not.
o Be aware that they will probably be measuring you for a while. The good news is that at some point, if you have been successful at establishing rapport-they will relax and you can both concentrate on finding or selling the home.
What else can help me develop rapport?
o By trying to understand different personality types and then by saying and asking the right questions.
o If you have good rapport (get on the same wave length as the customer) then the selling is basically over, now it’s just a matter of finding the right home or filling out the listing papers.
What about different personalities
o Since this is not a book on psychiatry, for now just understand two main types.
o There are introverted and extroverted people.
o You know the type. Think about three people you know that fit each classification.
What about body Language and speech patterns?
o If they talk fast or slow, try to mimic their speech patterns.
o If they talk loud or soft, do the same. Are they leaning forward or backward?
o Needless to say, there are lots of books written on this subject. Just be aware that it is an important factor-especially when you’re sitting in a conference room or at someone’s home discussing a $400,000 deal.
Developing rapport is a skill that can be learned and improved upon.
o We all have experienced a salesperson that sold us something and yet we didn’t feel like we were being sold. The reason is he or she, made you feel comfortable to where you trusted them.
How do we develop rapport?
o Use your eyes and ears and ask questions. To explain
o Use the eyes:
o Look at their dress-their car-their personal possessions and I mean really look at them and decipher what that tells you about them.
o Use the ears:
o Listen to what they say and ask questions to get to the bottom of their real MOTIVATION!
Now during all this conversation, there will probably be one or two things you’ll discover that you have in common with them. (Family, geographical areas, fishing, etc) When you come across common ground, let them know you’re familiarity and then take a minute to discuss it with them.
What is the Goal?
o Once they accept you as one of them you’re in position to really have a great experience in the sale as you’re now working together then as a team—you’re no longer the salesman you’re now in an advisory position.
o Remember, the customer either will or will not allow you to enter his world. If you understand this and really work hard to become empathetic with him/her, you can gain a position of trust. In most cases, you will actually see them relax (body language) when this happens you’re on the way.
o To illustrate this have you ever given a speech and noticed that as you finally connected with an audience member they will nod in approval. These things may all seem trite but they aren’t.
In closing, if you can earn a customers trust, selling a product or service is much easier and the experience can be enoyable for everyone involved.
Always remember that a Win/Win is the best situation. Visit site: http://gameone.club/ article marketing tutorial
wElenaFax
22.08.2017 Работа в интернете Войдите, чтобы ответить
npavelFax
CraigWew
12.04.2018 п»їInside Programming: Python One of the high-level programming languages, Python is considered to be the most dynamic language that focuses on code readability. The best part of learning this language is that there are fewer steps in execution as compared to Java or C++.
Founded by Guido Van Rossum in the year 1991, it enjoys the status of being used in top organizations all over the world. Since its inception, the language has evolved drastically, imbibing advancements as the years have passed.
Benefits of Python
Interactive
Interpreted
Dynamic
High-Level
Portable
Most of the companies in fields like gaming, networking, graphic design applications, etc use this language as it has the most dynamically challenging module. Nearly 14% of the programming community of this world uses this language across different platforms like Linux, MacOS, Windows and UNIX.
Why We Love Python?
If you are using a multi-protocol network, then this is the best language. It definitely increases your overall productivity.
Python has large and extensive support libraries like string operations, Internet, web service tools, operating system interfaces and protocols. If you are looking for the best support system, then look no further. Python has all the important tasks scripted into it
A high-level language that has user-friendly structures that is also easy to learn.
Python has Enterprise Application Integration which makes Web developing easy by calling COB and COBRA components that are integrated within its structures. It’s powerful control abilities help in calling C, C++, Java through Jython
Future of Python
Computing world’s giant organization Google has made Python one of its official language. Making the future for Python enthusiasts secure. Learn this dynamic and robust programming language to get the best jobs in the industry! Visit site: http://gameone.club/ seo 2018 kindle Войдите, чтобы ответить
PRO_in_ALL
30.04.2016 здравствуйте, такие дела: я создал класс, в нём — символьный класс, хочу заполнить его с помощью gets, и мне вылезает ошибка что то вроде «функция ‘gets’ не является безопасной…» и не компилируется, скажите какие есть альтернативы заполнения символьного массива? только не по одной букве. Войдите, чтобы ответить
Оставить комментарий
Вы должны войти, чтобы оставить комментарий.
Rust Journey: Хотите освоить язык программирования, который завоевывает мир?
Илон Маск, один из ведущих инноваторов нашего времени, утверждает, что за Rust будущее. А когда последний раз он ошибался в своих прогнозах?
✨ Не упустите свой шанс быть в авангарде IT-революции. Подписывайтесь на канал Rust Journey и начните свой путь в захватывающий мир Rust сегодня!
Что означает символ в с
В языке C# символы @ и $, установленные перед строкой, используются для специальной интерпретации этой строки [1].
[Специальный символ @]
@ в начале строки используется для следующих целей:
1. Чтобы использовать ключевые слова C# в качестве идентификаторов. Символ @ предшествует элементу кода, который компилятор должен интерпретировать как идентификатор, а не ключевое слово C#. Получается тип String, к которому можно применять его методы Format, Length и т. д.
2. Чтобы указать, что строковый литерал следует интерпретировать буквально. Символ @ в этом случае определяет буквальный строковый литерал. Простые escape-последовательности (например, "\\" для обратной косой черты), шестнадцатеричные escape-последовательности (например, "\x0041" для прописной буквы A) и escape-последовательности Юникода (например, "\u0041" для прописной буквы A) интерпретируются буквально.
Исключения составляют только escape-последовательность кавычек ("") и escape-последовательности фигурных скобок, они не интерпретируется буквально.
"" Создает одну двойную кавычку.
>> Создает одну правую фигурную скобку.
В следующем примере определяются два идентичных пути к файлам: один с помощью обычного строкового литерала, а другой — с помощью буквального строкового литерала. Это один из наиболее распространенных способов использования буквальных строковых литералов.
string ИмяФайла1 = @"c:\Мои Документы\заметка.txt";
string ИмяФайла2 = "c:\\Мои Документы\\заметка.txt";
Console.WriteLine(ИмяФайла); Console.WriteLine(ИмяФайла);
// Пример выведет следующий текст:
// c:\Мои Документы\заметка.txt
// c:\Мои Документы\заметка.txt
В следующем примере показан результат определения обычного строкового литерала и буквального строкового литерала, содержащий идентичные последовательности символов. В первой строке строка1 \", \u, \x обрабатываются как esc-последовательности, (символы текста 'c' и '!' закодированы с беззнаковом и HEX-формате соответственно), а вторая строка строка2 интерпретируется буквально, esc-последовательности игнорируются.
string строка1 = "Он сказал \"This is the last \u0063hance\x0021\"";
string строка2 = @"Он сказал ""This is the last \u0063hance\x0021""";
Console.WriteLine(строка1); Console.WriteLine(строка2);
// Пример выведет следующий текст:
// Он сказал "This is the last chance!"
// Он сказал "This is the last \u0063hance\x0021"
3. Чтобы позволить компилятору различать атрибуты в случае конфликта имен. Атрибут класса, который наследует от Attribute. Имя его типа, как правило, содержит суффикс Attribute, несмотря на то, что компилятор не выполняет это соглашение. Затем на атрибут можно ссылаться в коде либо по его полному имени типа (например, [InfoAttribute]), либо по сокращенному имени (например, [Info]). Однако если два сокращенных имени типов совпадают и одно имя типа содержит суффикс Attribute, а другое — нет, возникает конфликт имен. Например, приведенный ниже код не может быть скомпилирован, так как компилятору не удается определить, какой атрибут — Info или InfoAttribute — применен к классу Example. Подробнее см. [2].
using System;
[AttributeUsage(AttributeTargets.Class)]
public class Info : Attribute < private string information; public Info(string info) < information = info; >>
[AttributeUsage(AttributeTargets.Method)]
public class InfoAttribute : Attribute < private string information; public InfoAttribute(string info) < information = info; >>
// Здесь [Info("Просто исполняемый код.")] приведет к ошибке
// компилятора CS1614. Получается неоднозначность для Info
// и InfoAttribute. Примените '@' спереди, чтобы выбрать 'Info'.
// Укажите полное имя 'InfoAttribute' для его выбора.
[Info("Просто исполняемый код.")]
public class Example[InfoAttribute("Точка входа в программу.")] public static void Main() < >>[Символ интерполируемой строки $]
Специальный знак $ идентифицирует строковый литерал как интерполированную строку, т. е. в результате получается строковый литерал, который может содержать выражения интерполяции. При разрешении интерполированной строки в результирующую элементы с выражениями интерполяции заменяются строковыми представлениями результатов выражений. В C# версии 6 эта функция была добавлена впервые.
Интерполяция строк предоставляет более понятный и удобный синтаксис для создания форматированных строк по сравнению с функцией составного форматирования строк. В следующем примере обе этих функции используются для получения одинаковых выходных данных:
string name = "Андрей";var date = DateTime.Now;
// Вывод с использованием обычного составного форматирования: Console.WriteLine("Привет, ! Сегодня , время .", name, date.DayOfWeek, date);// Вывод с помощью интерполированной строки: Console.WriteLine($"Hello, ! Today is ,it's now.");
// Оба вызова сгенерируют одинаковый текст:
// Привет, Андрей! Сегодня среда, время 09:58.
[Ссылки]
1. Специальные символы в C# site:docs.microsoft.com.
2. Ошибка компилятора CS1614 site:docs.microsoft.com.
3. C#: операторы ?? и ??=.