Что такое символ в программировании
4.11 – Символы
На данный момент базовые типы данных, которые мы рассмотрели, использовались для хранения чисел (целые числа и числа с плавающей запятой) или значений истина/ложь (логические значения). Но что, если мы хотим хранить буквы?
ASCII расшифровывается как American Standard Code for Information Interchange (Американский стандартный код для обмена информацией) и определяет конкретный способ представления английских символов (плюс несколько других символов) в виде чисел от 0 до 127 (называемых кодом ASCII или кодовым обозначением). Например, код ASCII 97 интерпретируется как символ ‘ а ‘.
Символьные литералы всегда помещаются в одинарные кавычки (например, ‘ g ‘, ‘ 1 ‘, ‘ ‘).
Ниже приведена полная таблица символов ASCII:
Code | Symbol | Code | Symbol | Code | Symbol | Code | Symbol |
---|---|---|---|---|---|---|---|
0 | NUL (null) | 32 | (space) | 64 | @ | 96 | ` |
1 | SOH (start of header, начало «заголовка») | 33 | ! | 65 | A | 97 | a |
2 | STX (start of text, начало «текста») | 34 | ” | 66 | B | 98 | b |
3 | ETX (end of text, конец «текста») | 35 | # | 67 | C | 99 | c |
4 | EOT (end of transmission, конец передачи) | 36 | $ | 68 | D | 100 | d |
5 | ENQ (enquiry, «Прошу подтверждения!») | 37 | % | 69 | E | 101 | e |
6 | ACK (acknowledge, «Подтверждаю!») | 38 | & | 70 | F | 102 | f |
7 | BEL (bell, звуковой сигнал: звонок) | 39 | ’ | 71 | G | 103 | g |
8 | BS (backspace, возврат на один символ) | 40 | ( | 72 | H | 104 | h |
9 | HT (horizontal tab, горизонтальная табуляция) | 41 | ) | 73 | I | 105 | i |
10 | LF (line feed/new line, перевод строки) | 42 | * | 74 | J | 106 | j |
11 | VT (vertical tab, вертикальная табуляция) | 43 | + | 75 | K | 107 | k |
12 | FF (form feed / new page, «прогон страницы», новая страница) | 44 | , | 76 | L | 108 | l |
13 | CR (carriage return, возврат каретки) | 45 | — | 77 | M | 109 | m |
14 | SO (shift out, «Переключиться на другую ленту (кодировку)») | 46 | . | 78 | N | 110 | n |
15 | SI (shift in, «Переключиться на исходную ленту (кодировку)») | 47 | / | 79 | O | 111 | o |
16 | DLE (data link escape, «Экранирование канала данных») | 48 | 0 | 80 | P | 112 | p |
17 | DC1 (data control 1, первый символ управления устройством) | 49 | 1 | 81 | Q | 113 | q |
18 | DC2 (data control 2, второй символ управления устройством) | 50 | 2 | 82 | R | 114 | r |
19 | DC3 (data control 3, третий символ управления устройством) | 51 | 3 | 83 | S | 115 | s |
20 | DC4 (data control 4, четвертый символ управления устройством) | 52 | 4 | 84 | T | 116 | t |
21 | NAK (negative acknowledge, «Не подтверждаю!») | 53 | 5 | 85 | U | 117 | u |
22 | SYN (synchronous idle) | 54 | 6 | 86 | V | 118 | v |
23 | ETB (end of transmission block, конец текстового блока) | 55 | 7 | 87 | W | 119 | w |
24 | CAN (cancel, «Отмена») | 56 | 8 | 88 | X | 120 | x |
25 | EM (end of medium, «Конец носителя») | 57 | 9 | 89 | Y | 121 | y |
26 | SUB (substitute, «Подставить») | 58 | : | 90 | Z | 122 | z |
27 | ESC (escape) | 59 | ; | 91 | [ | 123 | < |
28 | FS (file separator, разделитель файлов) | 60 | 94 | ^ | 126 | ||
31 | US (unit separator, разделитель юнитов) | 63 | ? | 95 | _ | 127 | DEL (delete, стереть последний символ) |
Коды 0–31 называются непечатаемыми символами и в основном используются для форматирования и управления принтерами. Большинство из них сейчас устарели.
Коды 32–127 называются печатными символами и представляют собой буквы, цифры и знаки препинания, которые большинство компьютеров используют для отображения основного английского текста.
Инициализация переменных char
Вы также можете инициализировать переменные типа char целыми числами, но этого, если возможно, следует избегать.
Предупреждение
Будьте осторожны, чтобы не перепутать символы чисел с целыми числами. Следующие две инициализации не эквивалентны:
Символы чисел предназначены для использования, когда мы хотим представить числа в виде текста, а не в виде чисел и применения к ним математических операций.
Печать переменных типа char
Данная программа дает следующий результат:
Мы также можем напрямую выводить символьные литералы:
В результате это дает:
Напоминание
Печать переменных char как целых чисел через приведение типов
Однако это довольно коряво. Лучше использовать приведение типа. Приведение типа создает значение одного типа из значения другого типа. Для преобразования между базовыми типами данных (например, из char в int или наоборот) мы используем приведение типа, называемое статическим приведением.
Синтаксис статического приведения выглядит немного забавным:
Ключевые выводы
Всякий раз, когда вы видите синтаксис C++ (за исключением препроцессора), в котором используются угловые скобки, то, что между угловыми скобками, скорее всего, будет типом. Обычно C++ работает с концепциями, которым нужен параметризуемый тип.
Ниже показан пример использования статического приведения для создания целочисленного значения из нашего значения char :
Эта программа дает следующий вывод:
Важно отметить, что параметр static_cast вычисляется как выражение. Когда мы передаем переменную, эта переменная вычисляется для получения ее значения, которое затем преобразуется в новый тип. На переменную не влияет приведение ее значения к новому типу. В приведенном выше случае переменная ch по-прежнему является char и сохраняет то же значение.
О статическом приведении типов и других типах приведения мы поговорим подробнее в следующем уроке (8.5 – Явное преобразование типов (приведение) и static_cast ).
Ввод символов
Следующая программа просит пользователя ввести символ, а затем печатает его как символ и его код ASCII:
Ниже показан результат одного запуска:
Вы можете увидеть это поведение в следующем примере:
Размер, диапазон и символ по умолчанию у переменных char
char определяется C++ всегда размером 1 байт. По умолчанию char может быть со знаком или без знака (хотя обычно он со знаком). Если вы используете переменные char для хранения символов ASCII, вам не нужно указывать знак (поскольку переменные char со знаком и без знака могут содержать значения от 0 до 127).
Экранированные последовательности
В C++ есть некоторые символы, которые имеют особое значение. Эти символы называются экранированными последовательностями (управляющими последовательностями, escape-последовательностями). Экранированная последовательность начинается с символа ‘\’ (обратный слеш), за которым следует буква или цифра.
Вы уже видели наиболее распространенную экранированную последовательность: ‘ \n ‘, которую можно использовать для вставки символа новой строки в текстовую строку:
Эта программа выдает:
Еще одна часто используемая экранированная последовательность – ‘ \t ‘, которая включает горизонтальную табуляцию:
Три других примечательных экранированных последовательности:
Ниже приведена таблица всех экранированных последовательностей:
Название | Символ | Назначение |
---|---|---|
Предупреждение | \a | Выдает предупреждение, например звуковой сигнал |
Backspace | \b | Перемещает курсор на одну позицию назад |
Перевод страницы | \f | Перемещает курсор на следующую логическую страницу |
Новая строка | \n | Перемещает курсор на следующую строку |
Возврат каретки | \r | Перемещает курсор в начало строки |
Горизонтальная табуляция | \t | Печать горизонтальной табуляции |
Вертикальная табуляция | \v | Печатает вертикальную табуляцию |
Одинарная кавычка | \’ | Печать одинарной кавычки |
Двойная кавычка | \» | Печать двойной кавычки |
Обратная косая черта | \\ | Печатает обратный слеш |
Вопросительный знак | \? | Печатает вопросительный знак Больше не актуально. Вы можете использовать вопросительные знаки без экранирования. |
Восьмеричное число | \(число) | Преобразуется в символ, представленный восьмеричным числом |
Шестнадцатеричное число | \x(число) | Преобразуется в символ, представленный шестнадцатеричным числом |
Вот несколько примеров:
Эта программа напечатает:
Новая строка ( \n ) против std::endl
В чем разница между заключением символов в одинарные и двойные кавычки?
Отдельные символы всегда заключаются в одинарные кавычки (например, ‘a’, ‘+’, ‘5’). char может представлять только один символ (например, букву а, знак плюса, цифру 5). Что-то вроде этого некорректно:
Текст, заключенный в двойные кавычки (например, «Hello, world!»), называется строкой. Строка – это набор последовательных символов (и, таким образом, строка может содержать несколько символов).
Пока вы можете использовать строковые литералы в своем коде:
Мы обсудим строки в следующем уроке (4.12 – Знакомство с std::string ).
Правило
Всегда помещайте отдельные символы в одинарные кавычки (например, ‘ t ‘ или ‘ \n ‘, а не » t » или » \n «). Это помогает компилятору более эффективно выполнять оптимизацию.
wchar_t следует избегать почти во всех случаях (за исключением взаимодействия с Windows API). Его размер определяется реализацией и не является надежным. Он не рекомендуется для использования.
В качестве отступления.
Англоязычный термин «deprecated» (не рекомендуется) означает «всё еще поддерживается, но больше не рекомендуется для использования, потому что он был заменен чем-то лучшим или больше не считается безопасным».
Подобно тому, как ASCII сопоставляет целые числа 0–127 с символами английского алфавита, существуют и другие стандарты кодировки символов для сопоставления целых чисел (разного размера) с символами других языков. Наиболее известной кодировкой за пределами диапазона ASCII является стандарт Unicode (Юникод), который сопоставляет более 110 000 целых чисел с символами на многих языках. Поскольку Unicode содержит очень много кодовых обозначений, то для одного кодового обозначения, чтобы представить один символ, Unicode требуется 32 бита (кодировка UTF-32). Однако символы Unicode также могут быть закодированы с использованием 16-ти или 8-ми битов (кодировки UTF-16 и UTF-8 соответственно).
char16_t и char32_t были добавлены в C++11 для обеспечения явной поддержки 16-битных и 32-битных символов Unicode. char8_t был добавлен в C++20.
А пока при работе с символами (и строками) вы должны использовать только символы ASCII. Использование символов из других наборов символов может привести к неправильному отображению ваших символов.
Символьный тип данных. Управляющие символы
По таблице ASCII символы с номерами (кодами) от 0 до 127 жестко определены. В этом диапазоне номера присвоены символам цифр, латинским (английским) маленьким и большим буквам, знакам препинания, а также некоторым другим символам (‘#’, ‘%’, ‘
‘ и т. п.). Здесь же заданы коды для различных управляющих символов, которые никак не экране не отображаются, а что-то делают (например, создают новою строку или отступ, подают звуковой сигнал и др.). Расширенная таблица ASCII кодирует символы национальных алфавитов (например, русского языка) числами, лежащими в диапазоне от 128 до 255.
Английские большие буквы (прописные) имеют последовательные коды от 65 (A) до 90 (Z), маленькие (строчные) — от 97 до 122.
Напишите программу, в которой объявлены только две переменные символьного типа. Одной переменной присвоен, например, символ ‘4’, а второй — ‘7’. Функция printf() должна выводить на экран разность и сумму чисел, которые были представлены символами и присвоены переменным.
Переменная not_num содержит строку из трех символов-цифр, например «528». Необходимо получить из этой строки соответствующее ему число и присвоить его переменной num. Вывести на экран результат выражения num – 10. (Подсказка: строка — это массив символов, следовательно, вы можете извлекать символы цифр по их индексам; при вычислении числа первый символ массива, преобразованный в число, будет означать количество сотен, второй — десятков, а третий — единиц.)
Известно, что символ A английского алфавита имеет код 65. Напишите программу, определяющую какие символы в этом алфавите стоят на 5, 12 и 19 местах.
Управляющие символы
Специальные, или управляющие, символы в программном коде обозначаются двумя знаками, т. к. одним их обычно обозначить невозможно. Но по сути представляют собой один символ. Например, букву ‘a’ можно обозначить одним символом, но как обозначить символ создания новой строки, если ему не соответствует ни один знак? Приходится представлять непечатаемый символ комбинацией пары других символов: ‘\n’.
Ниже перечислен ряд управляющих символов (не все) и то, что они делают:
‘\n’ — создание новой строки и переход на нее;
‘\t’ — табуляция (отступ в несколько пробелов);
‘\r’ — возврат каретки (перевод курсора в первую позицию текущей строки);
‘\b’ — возврат курсора на один символ назад с удалением этого символа.
В программном коде, помимо управляющих, специальными символами могут записываться некоторые вполне обычные символы, такие как кавычки, одиночные кавычки, обратная косая черта и др. Некоторые из этих символов можно задать одним символом в одиночных кавычках. Но многие из них невозможно вставить просто так внутрь строки, т. к. они что-то значат с точки зрения синтаксиса языка. Например, обратная косая черта в строке сообщает, что начинается обозначение специального символа, двойная кавычка обозначает начало или конец строки. Поэтому такие символы также обозначаются парной комбинацией других символов:
‘\\’ — обратный косая черта;
‘\»‘ — двойная кавычка (не в строке можно просто ‘»‘);
‘\0’ — пустота, символ с кодом 0 по таблице ASCII.
Напишите программу, в которой бы использовалась табуляция, вывод на экран строки в двойных кавычках, в одиночных кавычках (апострофах), затирание предыдущего символа и возврат каретки (для последних двух случаев, чтобы увидеть результат, управляющие символы надо вставить внутрь строки). Проверьте, как выводится на экран строка, если в ее середине стоит нулевой символ.
Выведите на экран символьное обозначение управляющих символов и их номера по таблице ASCII. Пример вывода:
Выясните экспериментальным путем, как вывести на экран символ %. (Существует два способа.)
А символ в компьютерное программирование это примитивный тип данных чей экземпляры имеют уникальную, удобочитаемую форму. Символы могут использоваться как идентификаторы. В некоторых языки программирования, они называются атомы. [1] Уникальность обеспечивается удержанием их в таблица символов. Чаще всего программисты используют символы для выполнения языка. отражение (особенно для обратные вызовы), и наиболее распространенным косвенным образом является их использование для создания объекта связи.
В самом банальном выполнение, по сути, они названы целые числа (например, перечислимый тип в C).
Содержание
Поддерживать
Следующее языки программирования предоставлять время выполнения поддержка символов:
язык | имя типа | пример литерала (ов) |
---|---|---|
ANSI Common Lisp | символ, ключевое слово | символ, :ключевое слово |
Clojure | символ, [2] ключевое слово [3] | 'символ, :ключевое слово |
Эликсир | атом, символ | : sym |
Erlang | атом | сим или же 'сим' |
Юля | Символ | : sym |
Цель-C | SEL | @selector (симв.) |
PICAXE БАЗОВЫЙ | символ | символ let name = переменная |
Пролог | атом, символ | сим или же 'сим' |
Рубин | Символ | : sym или же : 'сим' |
Scala | scala.Symbol | 'символ |
Схема | символ | сим |
Болтовня | Символ | #sym или же # 'sym' |
SML / NJ | Атом.атом | |
JavaScript (ES6 и новее) | Символ | Символ («симв»); |
Язык Wolfram Language | Символ | Символ ["сим"] или же сим |
K (язык программирования) | символ | `сим |
Символ в Лисп уникален в пространство имен (или же упаковка в Common Lisp). Символы можно проверить на равенство с функцией EQ. Программы на Лиспе могут генерировать новые символы во время выполнения. Когда Lisp считывает данные, содержащие символы, представленные в текстовом виде, делается ссылка на существующие символы. Если символ неизвестен, программа чтения Лиспа создает новый символ.
В Common Lisp символы имеют следующие атрибуты: имя, значение, функцию, список свойств и пакет. [4]
В Common Lisp также возможно, что символ не интернирован в пакет. Такие символы можно напечатать, но при обратном чтении необходимо создать новый символ. Поскольку он не * интернирован *, исходный символ не может быть извлечен из пакета.
В символах Common Lisp могут использоваться любые символы, включая пробелы, такие как пробелы и символы новой строки. Если символ содержит пробельный символ, его нужно записать как | это символ |. Символы могут использоваться в качестве идентификаторов для любых именованных программных конструкций: переменных, функций, макросов, классов, типов, тегов goto и т. Д. Символы могут быть интернированы в пакет. [5] Символы ключевых слов оцениваются самостоятельно [6] и интернирован в пакете KEYWORD.
Примеры
Ниже приводится простое внешнее представление Common Lisp символ:
Символы могут содержать пробелы (и все другие символы):
В Common Lisp символы с начальным двоеточием в их печатном представлении являются ключевые символы. Они включены в пакет ключевых слов.
Печатное представление символа может включать имя пакета. Между названием пакета и названием символа ставятся два двоеточия.
Пакеты могут экспортировать символы. Тогда между именем пакета и именем символа ставится только одно двоеточие.
Символы, которые не интернированы в пакете, также могут быть созданы и иметь обозначение:
Пролог
В Пролог, символы (или атомы) являются первичными примитивными типами данных, подобными числам. [7] Точная запись может отличаться в разных диалектах Пролога. Однако это всегда довольно просто (никаких кавычек или специальных начальных символов не требуется).
В отличие от других языков, символы можно смысл путем создания некоторых фактов и / или правил Пролога.
Примеры
Следующий пример демонстрирует два факта (описывающих, что отец есть) и одно правило (описывающее смысл из брат или сестра). В этих трех предложениях используются символы (отец, зевс, гермес, персей и брат) и некоторые абстрактные переменные (X, Y и Z). В мать отношения опущены для ясности.
Рубин
В Рубин, символы могут быть созданы в буквальной форме или путем преобразования строки. [1] Их можно использовать как идентификатор или интернированную строку. [8] Два символа с одинаковым содержанием всегда будут относиться к одному и тому же объекту. [9] Считается лучшая практика использовать символы как ключи к ассоциативный массив в Ruby. [8] [10]
Примеры
Ниже приводится простой пример символьного литерала в Ruby: [1]
Строки можно преобразовать в символы, и наоборот:
Символы являются объектами Символ класс в Ruby: [11]
Символы обычно используются для динамической отправки сообщений (вызова методов) объектам:
Символы как ключи ассоциативного массива:
Болтовня
В Болтовня, символы могут быть созданы в буквальной форме или путем преобразования строки. Они могут использоваться как идентификатор или интернированная строка. Два символа с одинаковым содержанием всегда будут относиться к одному и тому же объекту. [12] В большинстве реализаций Smalltalk селекторы (имена методов) реализованы как символы.
Примеры
Ниже приводится простой пример символьного литерала в Smalltalk:
Строки можно преобразовать в символы, и наоборот:
Символы соответствуют символ протокол, а их класс называется Символ в большинстве реализаций:
Символы обычно используются для динамической отправки сообщений (вызова методов) объектам:
Символы в языке С+ +
Базовый тип для символов и строк char
char str [0] = «среда»;
char str [10] =
Особенность строк:
для строки «А» длина = 2 байта
для символа ‘А’ длина = 1 байт
Ввод и вывод текстовой информации
int ch;
Вывод символа : putchar (C1)
char str [80]; // объявление строки
cout
gets (str); // ввод строки
puts (str); // вывод строки
Стандартные программные решения
int n;
char c;
c = n + ‘0′;
if ( c >= ‘0’ && c
if (n
else c = n- 10 + ‘A’;
if (c >= ‘a’ && c
Строки
Для работы со строками необходимо использовать заголовочный файл string.h
Функции для работы со строками
1.Определение длины строки strlen ( )
char str [ ] = «0123456789»
int l = strlen (str);
cout
Завершающий нулевой символ в длину строки входит.
2.Копирование строк strcpy ( ), strncpy ( )
char strcpy (str1, str2)
Выполняется побайтное копирование символов из строки str2 в строку str1. Копирование прекращается только в случае достижения символа ‘\0’ (нуль- терминатор). Перед копированием необходимо проверить выполнение условия, что длина str2 меньше или равна длине str1. В противном случае возможно возникновение ошибок, связанных с наложением данных.
strcpy (str, «Проверка копирования»);
Копирование через указатели и копирование не всей строки
char str1[20] = «Проверка копирования»;
char str2[20];
char *ptr = str1;
ptr + = 9, // ptr указывает на слово «копирование»;
strcpy (str2, ptr);
cout
Функция strncpy ( ) копирует n символов из строки S2 в строку S1.
Пример: char str [40]
strncpy (str, “Borland C+ +”,7)
puts(str); // Borland
3.Конкатенация (или присоединение) строк strcat ( )
strncat ( ) – присоединение n символов из другой строки
Строка str2 присоединяется к строке str1. Величина str1 должна быть достаточной для хранения объединенной строки.
Пример: char str [80];
strcpy (str, «Для продолжения»);
strcat (str, «Нажмите клавишу»);
Синтаксис: strncat (str1, str2, n)
Пример: char str [80]; = “Языки программирования”;
char str [30] = “ C+ +, Паскаль, Бейсик”;
strncat (str1, str2, 13);
puts(str1); // Языки программирования: С+ +, Паскаль
4.Сравнение строк strcmp ( )
Функция имеет тип int, так как данная функция выполняет сравнение двух строк str1 и str2, различая прописные и строчные буквы, в результате сравнения возвращает одно из следующих значений:
Если результат функции
Если результат функции = 0, то строки эквивалентны
Если результат функции > 0, то str1 > str2
Пример: str1 [ ] = «Borland»
str2 [ ] = «BORLAND»
int i;
i = strcmp (str1, str2); // i = 32
Распишем АСКИ-коды заданных строки и сравним их
Borland 66 111 114 108 97 110 100
BORLAND 66 79 82 76 65 78 68
Разница между кодами символов строк = 32, результат больше 0, значит строка str1> str2
Функция strncmp( ) проводит сравнение определенного числа первых символов двух строк. Регистр символов при этом учитывается.
char str1 [ ] = «Ошибка открытия базы»;
char str2 [ ] = «Ошибка открытия базы»;
i =strncmp (str1, str2, 12)
строки отличаются одним символом
Функция stricmp() сравнивает строки, не различая регистра символов. Возвращается одно из следующих значений: i > 0, i = 0, i
char str1 [ ] = «Moon»; char str2 [ ] = «MOON»;
int i = strincmp (str1, str2);
i=0, строки эквивалентны
5.Преобразование строк: strlwr ( ), strupr ( ), strrev ( )
strlwr ()- преобразует прописные буквы в строчные
Пример: char str [ ] = «HELLO»;
strupr ()- преобразует строчные буквы в прописные
strrev ()- реверсирование строки, т.е. изменяет порядок следования символов на обратный.
Пример: char str [ ] = “сон”;
6.Поиск символов
Пример: char str [ ] = «абвгдеёжзийк»;
pstr = strchr (str, ‘ж’);
В результате работы программы указатель pstr будет указывать на подстроку «жзийк» в строке str.
Пример: char str [ ] = «абвгджизийк»;
pstr = strrchr (str, ‘и’); // ийк
Функция проверяет каждый символ строки str на соответствие каждому из символов строки group. В результате работы, функция возвращает число совпавших символов.
Пример: char str [ ] = «Загрузка параметров БД»;
char substr [ ] = «Загрузка параметррррр»;
int i = strspn (str, substr);
cout
символы совпадают до 17 позиции.
Приведенная функция различает регистр символов.
strcspn ( )— сопоставляет символы строки str1 и str2 и возвращает длину строки str1, не входящей в str2. С помощью этой функции можно определить, в какой позиции происходит перекрещение двух символьных массивов.
Пример: char str [ ] = «abcdefghijk»;
int k;
k = strcspn (str, «elf»);
Пример: char str1 [ ] = «abcdefghjk»;
char str2 [ ] = «esb»;
char *ptr;
ptr = strpbrk (str1, str2);
cout
bcdefghjk, т.к. символ ‘b’ из строки str2 встречается в строке str1 раньше других.
7.Поиск подстрок
strstr ()- данная функция осуществляет сканирование строки str1 и находит место первого вхождения подстроки str2 в строку str1. В случае успешного поиска функция strstr() возвращает указатель на первый символ строки str, начиная с которого следует точное совпадение части str1 обязательно со всей лексемой str2. Если строка str2 не найдена в str1, возвращается NULL.
Пример: c har str1 [80] = «Производится поиск элемента»;
char str2 [80] = «Поиск»;
char *ptr;
ptr = strstr(str1, str2);
cout
В случае успешного поиска данная функция обрезает строку str, помещая символ ‘\0’ в месте, где заканчивается найденная лексема. При повторном поиске лексемы в указанной строке str первым параметром следует указывать NULL.
Пример со строками(Решение задачи можно посмотреть, скачав файл «Задача-18»):
Подсчитать сумму цифр в строке.
#include
#include
#include
#include
main()
/clrscr();
char str[30];
int sum=0, i, k;
cout =’0′)&&(str[i]