Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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中的减法字母_C_Subtraction_Letters And Numbers - Fatal编程技术网

c中的减法字母

c中的减法字母,c,subtraction,letters-and-numbers,C,Subtraction,Letters And Numbers,我想知道如何用C语言“减去字母: 我的意思是,我有两个字母,'a'和'c',我想执行'c'-'a'='b',这是3-1=2。 如何在C中获得相同的行为? 我可以转换字母->数字,但如何管理字母表的有限长度谢谢。您可以将字母视为数字,然后将字母'a'添加回以使其正常化 所以 如果您想要数字差异,只需使用我的答案中的diff(ans会给您字母) 这不会如此简单 'a' - 'b' 将导致-1(或a前面的字符) 如果你想用包装纸处理底片,你必须检查一下 int diff = c2 - c1; ch

我想知道如何用C语言“减去字母:
我的意思是,我有两个字母,'a'和'c',我想执行'c'-'a'='b',这是3-1=2。
如何在C中获得相同的行为?

我可以转换字母->数字,但如何管理字母表的有限长度谢谢。

您可以将字母视为数字,然后将字母
'a'
添加回以使其正常化

所以

如果您想要数字差异,只需使用我的答案中的
diff
ans
会给您字母)

这不会如此简单

'a' - 'b' 
将导致
-1
(或a前面的字符)

如果你想用包装纸处理底片,你必须检查一下

int diff = c2 - c1;
char ans;
diff > 0 ? ans = diff + 'a' - 1 : 'z' + diff + 1; 
这将提供:

  • 'z'
    对于
    'b'-'c'
  • 'y'
    对于
    'b'-'d'
  • 你在看这个吗

    char a1,a2,a3;
    a3 = a1 - a2 + 'a';
    

    谢谢你的回答,我真正需要的是管理好字母表有26个字母这一事实。我的意思是,按照你的建议去做,例如,我不能用C语言做b-z或b-d。“a”~“z”表示为数字,因此可以像整数一样执行。所以b-d=-2。请记住,char类型的有符号性是由实现定义的。此代码不可移植,并且可能由于整数下溢而导致未定义的行为。例如,
    a3='a'-'b'+'a'
    在字符类型为无符号的实现上是未定义的行为。@Lundin字符是实现定义的,但并不是说字符的计算是实现定义的。首先,编译器将char升级为int以计算表达式。其次,在C99标准6.2.5中,它说“如果基本执行字符集的一个成员存储在char对象中,则其值保证为正。”@RolandXu整数-1不是任何已知字符集的成员,因此没有任何保证。这里的主要问题是字符被提升为int,这保证是有符号的。但是,结果会再次填充回一个字符中。如果结果存储在int而不是char中,那么代码就安全了。感谢您的回答,我需要的是管理字母表有26个字母这一事实。我的意思是,按照你的建议去做,例如,我不能做b-z或b-d。当计算
    'b'-'z'
    时,你期望结果是什么?'b'-'z'=='c',twain249完全理解,谢谢。你能不能用
    %
    操作符来完成这项工作<代码>-2%26=24,这就是你的算法所能得到的。@SashaChedygov这有什么意义?这只会使代码变得更慢,更难阅读。太好了,这就是我一直在寻找但却找不到的东西;但是z是什么,你是说“z”吗?我是说“z”,你从“b”-“c”中得到了什么?我想,
    %
    对眼睛来说更容易,但我想对每个人来说都是自己的。
    char a1,a2,a3;
    a3 = a1 - a2 + 'a';