Хорошо так первый немного 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.
Почему это было приостановлено? – MGZero
@MGZero Кто-то является рывком и ниспровергает ответы. – Kiril
Похоже, порядок дней здесь, в SO, недавно. –