Перейти к содержимому

Как в c преобразовать string в int

  • автор:

Руководство по программированию на C#. Преобразование строки в число

Для преобразования string в число используется вызов метода Parse или TryParse , который можно найти в числовых типах ( int , long , double и т. д.), или используются методы в классе System.Convert.

Немного эффективнее и проще вызвать метод TryParse (например, int.TryParse(«11», out number) ) или метод Parse (например, var number = int.Parse(«11») ). Использование метода Convert более удобно для общих объектов, реализующих IConvertible.

Можно использовать методы Parse или TryParse в числовом типе, который предположительно содержит строка, таком как тип System.Int32. Метод Convert.ToInt32 использует Parse внутри себя. Метод Parse возвращает преобразованное число; метод TryParse возвращает логическое значение, которое указывает, успешно ли выполнено преобразование, и возвращает преобразованное число в параметр out . Если строка имеет недопустимый формат, Parse создает исключение, а TryParse возвращает значение false . В случае сбоя операции синтаксического анализа при вызове метода Parse вы всегда должны использовать обработку исключений, чтобы перехватить FormatException.

Вызов метода Parse или TryParse

Методы Parse и TryParse игнорируют пробелы в начале и в конце строки, но все остальные символы должны быть символами, которые образуют соответствующий числовой тип ( int , long , ulong , float , decimal и т. д.). Любые пробелы в строке, образующие число, приводят к ошибке. Например, можно использовать для decimal.TryParse синтаксического анализа «10», «10,3» или «10», но этот метод нельзя использовать для синтаксического анализа 10 из «10X», «1 0» (обратите внимание на внедренное пространство), «10,3» (обратите внимание на внедренное пространство), «10e1» ( float.TryParse здесь работает) и т. д. Строку со значением null или String.Empty невозможно успешно проанализировать. Вы можете проверить наличие NULL или пустой строки, прежде чем пытаться ее проанализировать, вызвав метод String.IsNullOrEmpty.

В указанном ниже примере демонстрируются успешные и неуспешные вызовы методов Parse и TryParse .

using System; public static class StringConversion < public static void Main() < string input = String.Empty; try < int result = Int32.Parse(input); Console.WriteLine(result); >catch (FormatException) < Console.WriteLine($"Unable to parse ''"); > // Output: Unable to parse '' try < int numVal = Int32.Parse("-105"); Console.WriteLine(numVal); >catch (FormatException e) < Console.WriteLine(e.Message); >// Output: -105 if (Int32.TryParse("-105", out int j)) < Console.WriteLine(j); >else < Console.WriteLine("String could not be parsed."); >// Output: -105 try < int m = Int32.Parse("abc"); >catch (FormatException e) < Console.WriteLine(e.Message); >// Output: Input string was not in a correct format. const string inputString = "abc"; if (Int32.TryParse(inputString, out int numValue)) < Console.WriteLine(numValue); >else < Console.WriteLine($"Int32.TryParse could not parse '' to an int."); > // Output: Int32.TryParse could not parse 'abc' to an int. > > 

В следующем примере показан один из подходов к анализу строки, которая, как ожидается, будет включать начальные числовые символы (включая шестнадцатеричные символы) и конечные нечисловые символы. Он назначает допустимые символы в начале новой строки перед вызовом метода TryParse. Поскольку анализируемые строки содержат небольшое количество символов, в примере вызывается метод String.Concat для назначения допустимых символов новой строке. Для большей строки можете использовать класс StringBuilder.

using System; public static class StringConversion < public static void Main() < var str = " 10FFxxx"; string numericString = string.Empty; foreach (var c in str) < // Check for numeric characters (hex in this case) or leading or trailing spaces. if ((c >= '0' && c = 'A' && char.ToUpperInvariant(c) else < break; >> if (int.TryParse(numericString, System.Globalization.NumberStyles.HexNumber, null, out int i)) < Console.WriteLine($"'' --> '' --> "); > // Output: ' 10FFxxx' --> ' 10FF' --> 4351 str = " -10FFXXX"; numericString = ""; foreach (char c in str) < // Check for numeric characters (0-9), a negative sign, or leading or trailing spaces. if ((c >= '0' && c else < break; >> if (int.TryParse(numericString, out int j)) < Console.WriteLine($"'' --> '' --> "); > // Output: ' -10FFXXX' --> ' -10' --> -10 > > 

Вызов методов класса Convert

В следующей таблице перечислены некоторые методы класса Convert, которые можно использовать для преобразования строки в число.

Числовой тип Метод
decimal ToDecimal(String)
float ToSingle(String)
double ToDouble(String)
short ToInt16(String)
int ToInt32(String)
long ToInt64(String)
ushort ToUInt16(String)
uint ToUInt32(String)
ulong ToUInt64(String)

В данном примере вызывается метод Convert.ToInt32(String) для преобразования входных данных string в значение типа int. Пример перехватывает два наиболее распространенных исключения, которые могут создаваться этим методом, — FormatException и OverflowException. Если итоговое число можно увеличить, не превышая Int32.MaxValue, пример добавляет 1 к результату и отображает вывод.

using System; public class ConvertStringExample1 < static void Main(string[] args) < int numVal = -1; bool repeat = true; while (repeat) < Console.Write("Enter a number between −2,147,483,648 and +2,147,483,647 (inclusive): "); string? input = Console.ReadLine(); // ToInt32 can throw FormatException or OverflowException. try < numVal = Convert.ToInt32(input); if (numVal < Int32.MaxValue) < Console.WriteLine("The new value is ", ++numVal); > else < Console.WriteLine("numVal cannot be incremented beyond its current value"); >> catch (FormatException) < Console.WriteLine("Input string is not a sequence of digits."); >catch (OverflowException) < Console.WriteLine("The number cannot fit in an Int32."); >Console.Write("Go again? Y/N: "); string? go = Console.ReadLine(); if (go?.ToUpper() != "Y") < repeat = false; >> > > // Sample Output: // Enter a number between -2,147,483,648 and +2,147,483,647 (inclusive): 473 // The new value is 474 // Go again? Y/N: y // Enter a number between -2,147,483,648 and +2,147,483,647 (inclusive): 2147483647 // numVal cannot be incremented beyond its current value // Go again? Y/N: y // Enter a number between -2,147,483,648 and +2,147,483,647 (inclusive): -1000 // The new value is -999 // Go again? Y/N: n 

Совместная работа с нами на GitHub

Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

Как в c преобразовать string в int

Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=] _____ [Поиск] _____ [Литература по С++] ____ [Литература. Паскаль]

New Delphi Coder
Форумчанин Подтвердите свой е-майл
Регистрация: 20.07.2008
Сообщений: 874

koma_grusha, может и помогают, но что-то не работают(пишет что нет прототипа)
Sazary, А что значит atoi и c_str метода вроде нет.

Страх это слабость и потому, кто испугался уже побежден.
Регистрация: 19.12.2008
Сообщений: 5,788

А что значит atoi и c_str метода вроде нет.

atoi — стандартная функция преобразования си-строки в число (int). Требуется stdlib.h
метод c_str у класса string есть. Он преобразует строку в формат си-строки.

Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=] _____ [Поиск] _____ [Литература по С++] ____ [Литература. Паскаль]

New Delphi Coder
Форумчанин Подтвердите свой е-майл
Регистрация: 20.07.2008
Сообщений: 874
Sazary, спасибо разобрался, а как преобразовать из int в стр?
Страх это слабость и потому, кто испугался уже побежден.
Регистрация: 19.12.2008
Сообщений: 5,788

а как преобразовать из int в стр?

А вот это вопрос посложнее )
В си-строку-то преобразовать можно с помощью обратной функции itoa:

itoa (int, char*, int);

1-й аргумент — число, второй — буфер (строка), 3-й — система счисления.
Также можно использовать sprintf.

Для string‘ов знаю такой способ:

#include #include #include #include using namespace std; template std::string toString(T val) < std::ostringstream oss; osstemplate T fromString(const std::string& s) < std::istringstream iss(s); T res; iss >> res; return res; > int main() < string str; int iVal=123; float fVal=123.45; str = toString(iVal); str = toString(fVal); iVal = fromString(str); fVal = fromString(str); cout

ps Стянуто с инета )

Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=] _____ [Поиск] _____ [Литература по С++] ____ [Литература. Паскаль]

Перевод string в integer

Спасибо, все работает. Долго ломал голову и гуглил. А можешь пару коментов дать к параметрам функции этой?

2 мая 2011 в 20:29
ВНИМАНИЕ. Способ устарел, сейчас (2018) лучше использовать stoi.
24 сен 2018 в 21:44
И чтобы не надо было вчитываться в документацию, замечу, stoi использует strtol со всеми ее фичами
24 сен 2018 в 23:08

#include #include #include using namespace std; int main () < string S = "74"; istringstream iss (S, istringstream::in); int val; iss >> val; return 0; > 

Отслеживать
ответ дан 2 мая 2011 в 17:35
1,905 13 13 серебряных знаков 16 16 бронзовых знаков

#include #include using namespace std; void main() < string str = "1234567890"; int num = NULL; for (int i = 0; i < str.length(); i++)< num = num*10 + str[i] - 0x30; >cout

Отслеживать
ответ дан 8 дек 2016 в 16:10
21 3 3 бронзовых знака
int num = NULL; .
8 дек 2016 в 16:12
оно работать будет, но да, выглядит дико. Но точка с запятой после include - это интересно.
8 дек 2016 в 16:14
сделай так, если страшно: int num = 0;
8 дек 2016 в 16:26

можно написать по всякому, но лучше писать так, как принято. Но в 2016 году лучше использовать std::stoi.

8 дек 2016 в 16:40
это сильно просто:
8 дек 2016 в 16:54

using namespace std; void main()

Отслеживать
ответ дан 10 янв 2022 в 19:31
Vasyl Androshchook Vasyl Androshchook
21 2 2 бронзовых знака

В текущем виде ваш ответ непонятен. Пожалуйста, нажмите править под сообщением, чтобы добавить больше подробностей, которые помогут другим понять, как он отвечает на заданный вопрос. Вы можете найти больше информации о том, как писать хорошие ответы в Справке.

10 янв 2022 в 19:33

добро пожаловать на stack overflow на русском! пожалуйста, постарайтесь оставлять чуть более развёрнутые ответы. дополнить ответ можно, нажав править

Как преобразовать string в int java

Чтобы преобразовать строку в число, можно использовать статический метод parseInt() из класса Integer .

Integer.parseInt("10"); // 10 

Первый символ строки может быть знаком - , в этом случае число получится отрицательное

Integer.parseInt("-5"); // -5 

Если строку не удается привести к числу, будет выброшено исключение NumberFormatException

Integer.parseInt("34y"); // NumberFormatException 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *