2011-09-06 5 views
0

Можно создать дубликат:
How to convert a single char into an intChar to Int in C++?

Ну, я делаю основную программу, которым обрабатывает некоторые входные как:

2 + 2

Итак, я необходимо добавить 2 + 2.

Я сделал что-то нг как:

string mys "2+2"; 
fir = mys[0]; 
sec = mys[2]; 

Но теперь я хочу, чтобы добавить «ель» в «сек», так что мне нужно, чтобы преобразовать их в Int. Я пробовал «int (fir)», но не работал.

ответ

5

Существуют многообразные способы преобразования строки в int.

Решение 1: Использование функциональности устаревших С

int main() 
{ 
    //char hello[5];  
    //hello = "12345"; --->This wont compile 

    char hello[] = "12345"; 

    Printf("My number is: %d", atoi(hello)); 

    return 0; 
} 

Раствор 2: Использование lexical_cast (Наиболее подходящий & Простейшие)

int x = boost::lexical_cast<int>("12345"); 

Солу Тион 3: Использование C++ Streams

std::string hello("123"); 
std::stringstream str(hello); 
int x; 
str >> x; 
if (!str) 
{  
    // The conversion failed.  
} 
+0

Почему это было приостановлено? – MGZero

+1

@MGZero Кто-то является рывком и ниспровергает ответы. – Kiril

+0

Похоже, порядок дней здесь, в SO, недавно. –

2

Хорошо так первый немного Backround о том, почему то, что вы пытались не работать. В вашем примере fir объявляется как строка. Когда вы пытались сделать int (fir), то же самое, что и (int) fir, вы попытались сделать c-стиль от строки до целого. По сути, вы получите мусор, потому что c-стиль, созданный в C++, будет проходить через все доступные броски и выполнять первый, который работает. В лучшем случае вы получите значение памяти, которое представляет символ 2, который зависит от кодировки символов вашего использования (UTF-8, ascii и т. Д.). Например, если fir содержит «2», то вы можете получить 0x32 как целое значение (предполагая ascii). Вы никогда не должны использовать c-style casts, и единственное место, где действительно безопасно использовать их, - это преобразования между числовыми типами.

Если ваша строка соответствует примеру в вашем примере, сначала вы должны отделить строку от соответствующих последовательностей символов (токенов) с помощью функции strtok. В этом простом примере это будут «2», «+» и «2». Как только вы это сделаете, вы можете просто вызвать функцию, такую ​​как atoi, в строках, которые вы хотите преобразовать в целые числа.

Пример:

string str = "2"; 
int i = atoi(str.c_str()); //value of 2 

Однако, это будет получить немного более сложным, если вы хотите, чтобы иметь возможность обрабатывать нецелых чисел, а также. В этом случае лучше всего разделить на операнде (+ -/* и т. Д.), А затем выполнить поиск в числовых строках для десятичной точки.Если вы найдете его, вы можете рассматривать его как двойник и использовать функцию atof вместо atoi, а если нет, просто придерживайтесь atoi.