2010-09-04 2 views
1

привет у меня проблема. Я пытаюсь преобразовать строку типа «12314234» в int , поэтому я получу первое число в строке. из примера строки, которая показана выше, я хочу получить '1' в int. Я попытался: string line = "12314234"; int command = line.at(0); , но он вводит внутри команду значение ascii 1, а не номер 1. заранее.преобразование строки в int

ответ

3

Для преобразования числового символа («0„–“9„) к соответствующему значению, просто вычтет ASCII код“» 0 из результата.

int command = line.at(0) - '0'; 
+0

Стандарт C/C++ не гарантирует ASCII. Они гарантируют, что все числовые коды символов смежны и в порядке поступления, так что «5» - «0» приведет к 5, хотя. –

+0

И это не C++. См. Мой ответ. –

4
int command = line.at(0) - '0'; 

Численные значения цифровых символов, которые должны быть рядом друг с другом. Так что это работает везде и всегда. Независимо от того, какой набор символов используется вашим компилятором.

2

Стандартная функция преобразования ascii в интегральное значение - strtol (строка в длину) из stdlib (#include <cstdlib>). Для получения дополнительной информации см. http://en.wikipedia.org/wiki/Strtol, а затем ссылку с этой страницы, озаглавленную «Использование strtol правильно и переносимо». С помощью strtol вы можете преобразовать один числовой символ или последовательность числовых символов, и они могут быть несколькими базами (dec, hex и т. Д.).

+1

Да, кроме этого C, а не C++. – alternative

+2

@mathepiC#include , а затем используйте std :: strtol(). – Timothy

+0

Да, но вам нужно преобразовать 'string' в' char * ' – alternative

1

я пытаюсь преобразовать строку, как «12314234» в Int

подталкивание имеет библиотеку для этого:

int i = boost::lexical_cast<int>(str); 
1

К сожалению, чтобы присоединиться к этой партии поздно, но что случилось с :

int value; 
std::string number = "12345"; 
std::istringstream iss(number); 
iss >> value; 

Если вы проходите шестнадцатеричные вокруг (и кто не в эти дни), то вы можете сделать:

int value; 
std::string number = "0xff"; 
std::istringstream iss(number); 
iss >> std::hex >> value; 

Это C++ и не имеет ни одного из этого хака вычитания ASCii материала.

Путь boost::lexical_cast<>() хорош и чист, если вы используете boost. Если вы не можете гарантировать, что передаваемая строка будет числом, вы должны поймать заброшенную ошибку.