Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将C中的字符转换为int,使a=0、b=1和C=2?_C - Fatal编程技术网

如何将C中的字符转换为int,使a=0、b=1和C=2?

如何将C中的字符转换为int,使a=0、b=1和C=2?,c,C,我希望我的程序能将字符转换成整数,但不能转换成ASCII等价物。 例如,'A'应该等于0,而不是65,而'B'应该等于1。 然后我想把这个数字加到一个ASCII字符中,然后把这个值转换回一个char减法很好而且很容易实现,但是它只适用于ASCII和所有其他具有相邻字母代码点的字符集(这是绝大多数字符集) char test = 'C'; int num = test - 'A'; // result: 2 with ASCII and any other encoding // having t

我希望我的程序能将字符转换成整数,但不能转换成ASCII等价物。 例如,
'A'
应该等于0,而不是65,而
'B'
应该等于1。
然后我想把这个数字加到一个ASCII字符中,然后把这个值转换回一个
char

减法很好而且很容易实现,但是它只适用于ASCII和所有其他具有相邻字母代码点的字符集(这是绝大多数字符集)

char test = 'C';
int num = test - 'A';
// result: 2 with ASCII and any other encoding
// having the uppercase letters in sequence
如果您必须担心代码可能在字符集不适用于此条件的计算机上运行,您可能更喜欢查找表:

int lookup[] = { ['a'] = 0, ['A'] = 0, /* ... */ };

如果使用任意数字,不要忘记检查数组边界。请注意,中间未指定的值也被初始化为0,因此如果需要进行差分,可以为每个显式指定的值添加一个值(
['a']=1
),为0添加适当的错误处理,否则再次减去1…

减法很好而且很容易实现,但它只适用于ASCII和所有其他具有相邻字母代码点的字符集(这是绝大多数字符集)

如果您必须担心代码可能在字符集不适用于此条件的计算机上运行,您可能更喜欢查找表:

int lookup[] = { ['a'] = 0, ['A'] = 0, /* ... */ };

如果使用任意数字,不要忘记检查数组边界。请注意,中间未指定的值也被初始化为0,因此如果需要进行差异化,可以为每个明确指定的值添加一个(
['a']=1
),为0添加适当的错误处理,否则再次减去1…

检查字母是否为大写字母,然后分配值:

int num;
char ch = 'C'
if (ch >= 'A' && ch <= 'Z')
   num = ch - 'A'
else
   num = ch - 'a'
int-num;
char ch='C'

如果(ch>='A'&&ch检查字母是否为大写,然后分配值:

int num;
char ch = 'C'
if (ch >= 'A' && ch <= 'Z')
   num = ch - 'A'
else
   num = ch - 'a'
int-num;
char ch='C'

如果(ch>='A'&&ch为什么
c==3
而不是
c==2
?是的……A=0,b=1,c=2一般来说,只需减去
'A'
(或
'A'
)。如果你依赖ASCII,那么咨询可能会有所帮助。如果你从
66
中减去两个值(例如
65
)结果是什么?减法只适用于ASCII和那些具有相邻字母代码点的字符集。否则,您可能更喜欢查找表:
int lookup[]={['a']=0,[a]=0,/*…*/}
为什么
c==3
而不是
c==2
?是的…a=0,b=1,c=2通常,只需减去
'a'
(或
'a'
)。如果您依赖ASCII,那么咨询可能会有所帮助。请稍微想想,如果您从
66
中减去两个值(例如
65
),结果是什么?减法仅适用于ASCII和具有相邻字母代码点的字符集。否则,您可能更喜欢查找表:
int lookup[]={['A']=0、[A]=0、/*…*/}
uv'd以确保完整性。这在实践中几乎不需要,但例如EBCDIC是一种大写字母之间有“洞”的“讨厌”编码。@FelixPalmen你是什么意思?@toyotasupra只是一个奇怪的文本编码示例,其中字母不都“按顺序”排列,如果你需要你的代码可以移植到像这样的陌生系统中,这是你的答案:)uv的完整性。这在实践中几乎永远不会被需要,但例如EBCDIC是一个带有“洞”的“讨厌”编码在大写字母之间。@FelixPalmen你是什么意思?@toyotasupra只是一个奇怪的文本编码示例,其中字母不都是“按顺序”的。如果你需要你的代码可以移植到像这样的奇怪系统中,这就是答案:)