Увеличить символ в C - PullRequest
       21

Увеличить символ в C

0 голосов
/ 16 марта 2020

У меня есть небольшое непонимание с приращением символа в c. предположим, что

char c = 'A';

Теперь, если я сделаю c+1, значение в c будет 'B'. Это хорошо. Но почему, когда я делаю следующее:

c = c + argv[1][2]

, тогда я получаю 'r' в c почему?

, пожалуйста, предположите, что аргумент равен "in12345", тогда argv[1][2] равно 1.

То, что я пытаюсь сделать, это для некоторого ввода, допустим, ABCDEF должен получить BDFHJG, когда я делаю это циклически c способом из аргументов. но я не понимаю, почему вышеупомянутое не работает для меня.

почему это не работает и что я могу сделать, чтобы это исправить?

Ответы [ 3 ]

4 голосов
/ 16 марта 2020

пожалуйста, предположите, что аргумент in12345, тогда argv [1] [2] равен 1.

Нет, это не так. Это равно '1' или (при условии ASCII) 49.

'A' (65) + '3' (49) = 'r' (114)

Если вы хотите получить целое число 1 от символа '1', вам нужно его преобразовать. Актерский состав не поможет; один из способов сделать это с помощью некоторого арифметического c magi c:

char c = 'A';

const int valToAdd = argv[1][2] - '0';
c = c + valToAdd;

// c is now 66, or `'B'`

Однако, это немного хак, и он сломается, если argv[1][2] не находится в диапазоне '0' до '9'. Вы можете продолжить изучение лучших (лучших?) Способов получить целое число из числа ASCII c di git.

2 голосов
/ 16 марта 2020

'1' - это не только число 1 49, так как это код ASCII для символа '1'.

Таким образом, вы добавляете не 1, а 49.

1 голос
/ 16 марта 2020

"in12345" - это строка, состоящая из символов «i», «n», «1», «2» и т. Д. То есть, например, «1» не является числом. Это персонаж. Таким образом, в этом выражении

c = c + argv[1][2] 

у вас есть

c = c + '1'

, где добавляется символ c с внутренним представлением символа '1', которое в таблице ASCII имеет значение 49

Чтобы преобразовать символ '1' в целое значение 1, вы можете написать, например,

c = c + ( argv[1][2] - '0' ) 

или просто

c += argv[1][2] - '0'
...