【问题标题】:subtracting letters in cc中的字母减法
【发布时间】:2012-05-28 03:05:03
【问题描述】:

我想知道如何在 C 中“减去字母”:
我的意思是,我有 2 个字母,“a”和“c”,我想执行 'c'-'a'='b',即 3-1=2。
如何在 C 中获得相同的行为?
我可以转换字母->数字,但是如何管理有限长度的字母? 谢谢。

【问题讨论】:

  • 感谢您的回答,我真正需要的是管理字母表有 26 个字母的事实。我的意思是,按照你的建议做,例如,我不能做 b-z 或 b-d。
  • 计算'b'-'z'时你期望的结果是什么?
  • 'b' - 'z' == 'c', twain249 完全理解,谢谢。

标签: c subtraction letters-and-numbers


【解决方案1】:

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

所以

char c1 = 'a';
char c2 = 'c';
int diff = c2 - c1; //'c' - 'a' = 2
char ans = diff + 'a' - 1; //add 'a' and subtract 1 to normalize it

如果您想要数字差异,请使用我的回答中的diffans 会给您这封信)。

这不会环绕所以

'a' - 'b' 

将导致-1(或a之前的字符)

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

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

这将给出:

  1. 'z''b'-'c'
  2. 'y''b'-'d'

【讨论】:

  • 您不能只使用% 运算符吗? -2 % 26 = 24,不管怎样,这就是你用你的算法得到的。
  • @SashaChedygov 这有什么意义?它只会使代码更慢、更难阅读。
  • 完美,这就是我一直在寻找但找不到的;但是z是什么,你是说'z'吗?
  • 我的意思是'z',你得到'b'-'c'是什么意思?
  • 我认为% 看起来更容易,但我想每个人都有自己的想法。
【解决方案2】:

你在看这个吗?

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

【讨论】:

  • 感谢您的回答,我真正需要的是管理字母表有 26 个字母的事实。我的意思是,按照你的建议做,例如,我不能做 b-z 或 b-d。
  • C 语言。 'a' ~ 'z' 表示为数字,因此您可以像整数一样进行操作。所以 b - d = -2。
  • 请记住,char 类型的符号是实现定义的。此代码不可移植,并且可能由于整数下溢而导致未定义的行为。例如,a3 = 'a' - 'b' + 'a' 在 char 类型为无符号的实现上是未定义的行为。
  • @Lundin char 是实现定义的,但并不是说 char 的计算是实现定义的。首先,编译器将 char 提升为 int 以计算表达式。其次,在 C99 标准 6.2.5 中,它说“如果基本执行字符集的成员存储在 char 对象中,则其值保证为正数。”
  • @RolandXu 整数 -1 不是任何已知字符集的成员,因此无法保证。这里的主要问题是字符被提升为 int,这是保证被签名的。但是随后结果又被塞回了一个字符中。如果结果存储在 int 而不是 char 中,代码将是安全的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-10
  • 1970-01-01
相关资源
最近更新 更多