Как конвертировать строку в число
Описание функций языка Си
All | _ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z
atoi – преобразование строки в число типа int
#include
int atoi (const char *str);
str – указатель на строку, которую необходимо преобразовать в число.
Функция atoi () преобразует строку, на которую указывает аргумент str, в число типа int. Преобразование заканчивается, когда встречается символ не являющейся цифрой или, когда будет преобразована вся строка. Если первый символ строки не цифра, то функция вернет 0 и завершит работу.
Если число в строке превышает максимальный или минимальный размер числа типа int, то функция возвращает соответственно максимально или минимально допустимое число для типа int. Возвращаемая величина зависит от аппаратной платформы на которой запускается программа.
От функции atol () отличается типом возвращаемого числа и как следствие макимальной длинной преобразуемой строки. Для atoi возвращаемое число имеет тип int, а соответственно разрядность 16 или 32 бита в зависимости от аппаратной платформы, на которой запускается программа. Для atol возвращаемое число имеет тип long int, который всегда 32 разрядный, не зависимо от архитектуры процессора.
Так, на пример, в результате преобразования строки «217bg12» будет получено число 217, а при преобразовании строки «b237пр» будет получено число 0.
В примере преобразуется строка «652.23brrt» в число и результат выводится на консоль.
Преобразование строки в число и обратно
Задача Преобразовать строку символов в соответствующее число и обратно.
При составлении программ часто возникает задача получения данных, например, введенных в поле редактирования в числовой форме и вывод результата в текстовое поле.
Число, которое принимает участие в вычислительных процедурах, должно быть представлено в виде строки символов, понятных пользователю, для вывода на экран.
Например, число 235 состоит из трех символов — ‘2’, ‘3’, ‘5’.
Целью рассмотрения данной задачи является приведение символьной строки к соответствующему ей числовому виду.
Для этого нужно разбить символьную строку на значащие разряды и выбрать цифры, соответствующие каждому значащему разряду.
Каждый символ цифры имеет соответствующий ему код в базовой таблице кодировки:
Символ цифры | Десятичный код | Шестнадцатеричный код | Двоичный код |
0 | 48 | 0x30 | 0011 0000 |
1 | 49 | 0x31 | 0011 0001 |
2 | 50 | 0x32 | 0011 0010 |
3 | 51 | 0x33 | 0011 0011 |
4 | 52 | 0x34 | 0011 0100 |
5 | 53 | 0x35 | 0011 0101 |
6 | 54 | 0x36 | 0011 0110 |
7 | 55 | 0x37 | 0011 0111 |
8 | 56 | 0x38 | 0011 1000 |
9 | 57 | 0x39 | 0011 1001 |
В соответствии с приведенной таблицей, значащая часть каждого символа цифры содержится в младшей тетраде битов (младших четырех разрядах). Для получения цифры, соответствующей символу, достаточно произвести операцию:
n = s & 0x0F;
где n — значащая цифра, s — символ цифры. Маска 0x0F позволяет оставить только младшие 4 значащих разряда. Старшие 4 разряда становятся равны 0.
При решении обратной задачи — представления числа в виде текстовой строки — каждая цифра значащего разряда преобразуется в соответствующий ей символ с помощью операции:
s = n | 0x30;
Указанная операция добавляет двоичное значение 0011 в старшие 4 разряда, тем самым формируя код символа из соответствующей значащей цифры.
Результат выполнения
Урок 16. Конвертация строк в числа на C#
Все уроки по C# расположены здесь.
На данном уроке мы объединим типы данных, которые обсуждали до сих пор. Мы поговорим о преобразовании строковых значений в числовые типы. Это необходимо, например, тогда, когда пользователь может вводить любые данные, но требуется работать с ними как с числовыми.
Преобразование строк в числовые типы данных
Входные данные часто предоставляются с использованием текстовых полей; введенная информация будет представлять собой строку. Если текстовое поле используется, чтобы указать число, строка может потребовать преобразования в числовой тип данных.
Класс Convert находится в пространстве имен System. Он обеспечивает конвертацию с помощью статических методов. статические методы вызываются без предварительного создания объекта. Другими словами, вам не нужно создавать объект Convert для доступа к требуемым методам.
.NET структура и ключевые слова C#
Примечание: метод Convert может быть использован без ссылки на пространство имен System, поскольку Visual автоматически включает следующую строку в верхней части файла кода
С помощью этого оператор сообщает компилятору, какие пространства имен следует искать автоматически. Без этой команды необходимо включать пространство имен. Поскольку пространства имен могут иметь длинные имена, это может быть трудно читать. Без директивы using код будет
Числовые преобразования с Convert
Класс Convert также может использоваться для преобразования между числовыми типами. Если число с плавающей точкой преобразуется в целое число, то результат округляется до ближайшего целого числа.. Однако, в отличие от стандартных правил математического округления, если число с плавающей запятой находится ровно на полпути между двумя целыми числами, возвращается ближайшее четное число.
Также можно конвертировать строки в числа с помощью метода Parse. Это обеспечивает дополнительную гибкость, позволяя разработчику указать стиль преобразовываемого числа. Например, разрешение использования валютных символов или шестнадцатеричных чисел.
Метод Parse является перегруженным, это означает, что существует несколько способов для вызова метода, каждый с различными параметрами. Мы рассмотрим два вида перегрузок в этой статье. Первый принимает один параметр string, содержащий строку для преобразования
Использование числовых стилей (Number Styles)
Перечисление NumberStyles определено в System.Globalization. Чтобы избежать необходимости вводить System.Globalization перед каждой ссылкой на numberstyles добавьте директиву using в начало файла кода.
Теперь мы можем использовать NumberStyles перечисления в качестве второго параметра метода Parse.
Значения перечисления NumberStyles могут быть объединены с помощью оператора OR ( | ), что позволяет использовать несколько стилей. Например
Перечисление содержит некоторые предопределенные стили. В приведенном выше примере для преобразования значения валюты использовались два стиля. Мы можем использовать опцию валюты из перечисления NumberStyles, чтобы разрешить эти стили и многое другое.
.NET framework включает в себя большой объем функций, связанных с интернационализацией. Это просто означает, что возможна разработка программного обеспечения для пользователей по всему миру, с использованием своих локальных настроек для чисел, валют, языков и т.д. Это сложная тема и выходит за рамки текущего учебника по основам языка C#. Вообще говоря, для числовых преобразований вы можете использовать приведенные выше числовые стили для локальных настроек.
статьи IT, Уроки по си шарп, си шарп, конвертация
Конвертация строки в число
Помогал на днях одной своей знакомой разобраться в программировании. По ходу дела написали учебную программу, которая умеет конвертировать строку (string) в число (int). И как-то само собой захотелось сравнить скорость работы собственной нетленки, со скоростью работы стандартных инструментов (Convert.ToInt32 и Int32.Parse). Результат такого сравнения, на первый взгляд, получился несколько необычным.
Думаю, любой из вас сможет без особых проблем решить поставленную задачу, поэтому объяснять что и как работает смысла не вижу.
Сравнивать будем скорость работы следующих функций:
Если вместо Int32.Parse использовать Convert.ToInt32, то результат никак не изменится. Но это и понятно, если учесть, что функция Convert.ToInt32 сама вызывает Int32.Parse. Таким образом, получаем, что скорость работы собственного велосипеда быстрее скорости работы стандартной функции на
Если посмотреть документацию, то становится понятно, что функция Int32.Parse довольно сложная. В частности она умеет преобразовывать строковое представление числа с учетом региональных форматов. Хотя в моей практике этой функциональностью мне пользоваться не приходилось.
Попробуем сделать наше творение еще чуть более быстрее. Для этого в функции ToInt изменим цикл
В этом случае получаем:
MyConvertTest: 06.2629928 секунды
То есть теперь скорость работы нашей функции быстрее стандартной на
27%. Это довольно неожиданно. Я считал, что компилятор (или же CLR) сможет понять, что так как внутри цикла мы не изменяем переменную s, то значение s.Length будет получено только один раз.
Теперь попробуем вместо вызова функции CharToInt, встроить ее тело в функцию ToInt. В этом случае
MyConvertTest: 05.5496214 секунды
Так, скорость работы относительно стандартной функции увеличилась на
35%. Это тоже в свою очередь довольно неожиданно, так как компилятор (или CLR) в некоторых случаях самостоятельно может это сделать.
Уже почти все перепробовали. Осталось только попробовать отказаться от цикла for. Это можно сделать, например, следующим образом:
Результат:
MyConvertTest: 05.2410683 секунды
Это на
39% быстрее стандартной функции (и всего лишь на 3% быстрее варианта с for).
Как преобразовать строку в int в C++?
Объявление типа данных переменной является обязательным в C ++, потому что это строго типизированный язык. Иногда для целей программирования требуется изменить тип данных переменной с одного типа на другой, например, строку на int или int на строку. Этот тип преобразования может быть выполнен в C ++ с использованием различных типов встроенных функций. В этом руководстве были показаны различные способы преобразования строки в int в C ++.
Предварительные условия:
Прежде чем проверять примеры этого руководства, вы должны проверить, установлен ли компилятор g ++ в системе. Если вы используете Visual Studio Code, установите необходимые расширения для компиляции исходного кода C ++ и создания исполняемого кода. Здесь приложение Visual Studio Code было использовано для компиляции и выполнения кода C ++.
Использование функции atoi ()
Функция atoi () используется для возврата числа путем преобразования строки, созданной массивом символов, в целое число. Для использования этой функции необходимо включить заголовочный файл cstdlib.
Синтаксис:
Создайте файл C ++ со следующим кодом для преобразования строки чисел в целое число с помощью функции atoi (). Здесь функция strcpy () использовалась для преобразования строки в массив символов. Значение входной строки преобразовано в массив символов, и преобразованное значение было использовано в функции atoi () для получения целочисленного значения строки. Затем преобразованное целое число будет напечатано, если преобразование выполнено правильно.
//Include for printing the output
//Include for using the atoi() function
//Include for using the strcpy function
//Declare a string variable
std :: string strData ;
//Declare a chracter array variable
charstrarr [ 50 ] ;
//Take a number from the user
std :: cout <> strData ;
int number = std :: atoi ( strarr ) ;
//Print the number
std :: cout «The converted number is = « number ‘ \n ‘ ;
return0 ;
>
Следующие выходные данные появятся, если 6090 будет принято в качестве входных данных после выполнения кода.
Использование функции stoi ()
Функция atoi () используется для возврата числа путем преобразования строкового значения в целое число. Первый аргумент этой функции является обязательным, а остальные аргументы — необязательными. Синтаксис этой функции приведен ниже.
Синтаксис:
Создайте файл C ++ со следующим кодом для преобразования строки в целое число с помощью функции stoi (). После выполнения кода входное значение, полученное от пользователя, будет преобразовано в число и распечатано, если входное значение является допустимым числом. Если входное значение содержит какой-либо алфавитный или нечисловой символ, будет сгенерировано исключение invalid_argument и будет напечатано сообщение об ошибке.
//Include for printing the output
intmain ( )
<
//Declare a string variable
std :: string strData ;
//Take a number from the user
std :: cout <> strData ;
//Convert the string into number with error handling
try <
//Convert the string into integer
int number = std :: stoi ( strData ) ;
//Print the converted number
std :: cout «The converted number is = « number ‘ \n ‘ ;
>
//Handle error if invalid number is given
catch ( std :: invalid_argumentconst & e ) <
std :: cout «Input value is not a number. \n « ;
>
return0 ;
>
Следующий вывод появится, если после выполнения кода в качестве входных данных будет выбрано 4577.
Следующий вывод появится, если после выполнения кода будет принято приветствие в качестве ввода.
Использование строковых потоков
Использование функции istringstream () — еще один способ преобразовать строку в целое число с помощью оператора ’>>’. Создайте файл C ++ со следующим кодом для преобразования строковых данных в целое число с помощью функции istringstream (). Строковое значение чисел было присвоено строковой переменной в коде, который использовался в качестве значения аргумента функции istringstream (). Затем было напечатано преобразованное целочисленное значение.
//Include for printing the output
//Include for using the istringstream() function
intmain ( )
<
//Declare a string variable
std :: string strData = «12345» ;
//Declare an integer variable
intnumber ;
//Convert the string into the integer
std :: istringstream ( strData ) >> number ;
//Print the converted number
std :: cout «The converted number is = « number ‘ \n ‘ ;
return0 ;
>
После выполнения кода появится следующий вывод.
Используя функцию sscanf ()
Использование функции sscanf () — еще один способ преобразовать строку в целое число. Для использования этой функции необходимо включить заголовочный файл cstdio. Создайте файл C ++ со следующим кодом для преобразования строкового значения в целое число с помощью функции sscanf (). После выполнения скрипта у пользователя будет взято строковое значение. Если входное значение является допустимым числовым значением, то входное значение будет преобразовано в целое число и напечатано; в противном случае будет напечатано сообщение об ошибке.
//Include for printing the output
//Include for using the sscanf() function
intmain ( ) <
//Declare a string variable
std :: string strData ;
//Declare an integer variable
intnumber ;
Следующий вывод появится, если 78325 будет принят в качестве ввода после выполнения кода.
Использование цикла for
В следующем примере показано, как преобразовать строковое значение в целочисленное значение без использования какой-либо встроенной функции. Создайте файл C ++ со следующим кодом для преобразования строкового значения в целое число с помощью цикла for. Значение строки, число было назначено в переменный, которая была использована в » для » петли, чтобы преобразовать строку в целое число.
intmain ( )
<
//Declare a string variable
std :: string strData = «6000» ;
//Declare an integer variable
intnumber ;
//Convert the string into integer
for ( charchr : strData )
<
if ( chr >= ‘0’ && chr ‘9’ ) <
number = number * 10 + ( chr — ‘0’ ) ;
>
//Print the converted number
std :: cout «The converted number is = « number ‘ \n ‘ ;
return0 ;
>
Если после выполнения кода в качестве входных данных будет выбрано 6000, появится следующий вывод.
Заключение
В этом руководстве описаны пять различных способов преобразования строки в число с использованием простых примеров, помогающих читателям узнать, как преобразовать любую строку в целое число в программировании на C ++.