2015-09-27 2 views
2

В следующем коде я не могу понять, почему string преобразуется в int таким образом.Почему строка C++ преобразуется в int?

Почему он использует сумму с 0?

string mystring; 
vector<int> myint; 
mystring[i+1]=myint[i]+'0'; 
+3

Вы не поймете его, так как этот код не преобразует строку в int. – MikeCAT

+1

Или он может это сделать? Я хочу [MCVE] (http://stackoverflow.com/help/mcve). – MikeCAT

+0

Здесь нет какой-то петли. «I + 1» уверен, что это указывает. Предоставление контекста этого фрагмента кода может дать нам дополнительную информацию и позволит нам, возможно, объяснить, почему все это делается для начала. – rbaleksandar

ответ

2

Этот код преобразует int (предположительно цифру) в символ, который представляет его.

Поскольку символы являются последовательными, а char s могут рассматриваться как целые числа, символ, обозначающий определенную цифру, фактически может быть описан его расстоянием от '0'. Таким образом, 0 превращается в символ '0', '5' - символ, который больше '0', и т. Д.

+0

Поскольку символы являются последовательными ... _in ASCII_ –

2

Это эффективная, старая школа и опасный метод, чтобы получить представление символа одной цифры. '0' будет преобразован в int, содержащий его код ASCII (0x30 для '0'), а затем он добавляется в myint[i]. Если myint[i] равно 9 или ниже, вы можете наложить myint[i] на символ, который вы получите в результате цифры в виде текста.

вещи не так, как ожидалось, если вы добавите больше 9 к '0'

Вы можете также получить ряд из его символьного представления:

char text = '5'; 
int digit = text - '0'; 
1

Выражение '0' не строка типа, это char, который хранит символы ASCII, а также может представлять числа от 0 до 255. Таким образом, в арифметических операциях char ведет себя как целочисленный тип.

В строках C a представляют собой массивы символов: статические (char str[N]) или динамические (char *str = new char[n]). Строковые литералы помещаются в двойные кавычки ("string"). Итак, '0' is char и "0" is char [1]

Смежные вопросы