【问题标题】:C++ char subtractionC++ 字符减法
【发布时间】:2016-04-19 06:21:05
【问题描述】:

所以我意识到假设 ascii 编码会给你带来麻烦,但我从来不确定你会遇到多少麻烦减去字符。我想知道哪些相对常见的情况会导致以下任何一项评估为假。

给定:

std::string test = "B";
char m = 'M';

A)(m-'A')==12

B)(test[0]-'D') == -2

另外,小写值的答案是否会改变(将77 更改为109 ofc)?

编辑:Digit subtraction 回答这个问题的字符数字,标准说 '2'-'0'==2 必须为所有数字 0-9 保留,但我想知道它是否适用于 a-zA-Z,这标准的2.3 部分在我的阅读中不清楚。

编辑 2:删除了 ASCII 特定内容,以更清楚地集中问题(抱歉@πάντα-ῥεῖ 内容更改编辑,但我认为这是必要的)。本质上,该标准似乎暗示了基本集的某些字符顺序,但某些编码不保持这种顺序,那么最重要的原则是什么?

【问题讨论】:

  • 否决票/关闭投票 想发表评论吗? stackoverflow.com/questions/36310181/char-subtraction-in-c 不是重复的恕我直言,因为它引用标准作为仅保留数字。
  • 如果char 未签名怎么办?
  • @DavidSchwartz 好点,但我的示例都已签名。
  • 如果您在char 未签名的平台上执行(test[0]-'D'),您认为会发生什么?
  • @DavidSchwartz 没有意识到 char 可以是无符号的,而无需声明为 unsigned char。在这种情况下,B) 可能有问题。很高兴知道! (对于像我这样的其他人:stackoverflow.com/questions/17097537/…

标签: c++


【解决方案1】:

换句话说,C/C++ 中的字符什么时候不存储在 ASCII 中?

C 或 C++ 语言没有目标系统使用的实际字符编码表的任何概念。唯一的约定是像 'A' 这样的字符文字匹配当前编码。

您也可以处理EBCDIC 编码字符,代码看起来与ASCII 字符相同。

【讨论】:

  • 所以不能像数字那样保证基本字母表是连续的? IE。标准保证'2'-'0'==2,但不保证'C'-'A'
  • @AdamMartin 嗯,这些应该用一个健全的字符编码表来保证,像m==77 这样的东西不是。
  • 我意识到 m==77 不会成立,但在 EBCDIC 中,例如 A-Z 不是连续的。
  • 我不应该在你引用的关于 ASCII 的行中进行编辑,试图归结这个问题,但我做得过火了,因为我不太清楚答案/材料。
  • @AdamMartin 你在那条评论中回答了你自己的问题。
猜你喜欢
  • 2017-01-28
  • 1970-01-01
  • 2016-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-09
  • 1970-01-01
相关资源
最近更新 更多