2009-04-18 4 views
0

Я пытаюсь найти функцию в библиотеке, которая сдвигает символы назад и вперед, как я хочу к примеру:Char сдвиг в C

если эта функция потребляет «а» и ряд перекладывать вперед 3, его будет сдвигаться 3 раза, а выход будет «d».

Если эта функция потребляет «5», а число для смещения вперед 3, оно будет сдвинуто 3 раза, а выход будет «8».

как я могу это достичь?

ответ

3

Учитывая то, что вы просили, это делает это:

char char_shift(char c, int n) { 
    return (char)(c + n); 
} 

Если вы имели в виду что-то другое (возможно, намереваясь что 'Z' + 1 = 'A'), а затем переписать свой вопрос ...

+0

Вопрос действительно неполный - как следует перерабатывать/переполнять. Без этого не может быть дано полное решение. –

7

Вам не нужно вызывать функцию для этого. Просто добавьте номер персонажу напрямую.

Например:

'a' + 3 

вычисляет

'd' 
+0

Это верно для ASCII и наборов символов, основанных на нем, для букв A-Z. Это охватывает практически все соответствующие машины в современном мире. EBCDIC станет большим исключением, но, похоже, он довольно вымер. – 2009-04-18 09:04:20

+2

Возможно, вам захочется пересмотреть этот комментарий, @ liw.fi.EBCDIC жив и здоров на z/OS, который довольно хорошо запускает ВСЕ банки мирового класса и другие финансовые организации. Это даже в инкапсулированном UNIX, запущенном на этой платформе (что иногда затрудняет компиляцию FOSS, которая зависит от упорядочения ASCII, zLinux использует ASCII, так что это лучше). – paxdiablo

2

В Си char представляет собой целое число, тип (например, int и long long int).

Он функционирует точно так же, как и другие целочисленные типы, за исключением диапазона значений, которые он может хранить, как правило, ограничен -128 до 127 или от 0 до 255, хотя это зависит от реализации.

Например:

char x = 3; 
char y = 6; 
int z; 

z = x + y; 
printf("z = %d\n", z); //prints z = 9 

char типа (обычно как часть массива) чаще всего используется для хранения текста, где каждый символ кодируется как число.

Символьные и строковые константы - это удобство. Если мы предположим, что машина использует набор ASCII символов (который почти повсеместно сегодня), в этом случае заглавная А кодируется в виде 65, а затем:

char x = 'A'; 
char str[] = "AAA"; 

эквивалентно

char x = 65; 
char str[] = {65, 65, 65, 0}; 

Поэтому, что-то например, 'X' + 6 имеет смысл - какой результат будет зависеть от кодировки символов. В ASCII это эквивалентно 88 + 6, который равен 94, который равен '^'.

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