【问题标题】:What is '0' means? [closed]“0”是什么意思? [关闭]
【发布时间】:2022-01-23 01:48:07
【问题描述】:

我是编程新手,有时会看到这样的表达式

...
for (int i=0; i<str1.length(); i++) 
{ 
    int sum = ((str1[i]-'0')+(str2[i]-'0')); 
    str.push_back(sum%10 + '0'); 
}
...

所以这里是“0”?是某种转换还是什么?

【问题讨论】:

  • 如果str2[i] 是某个数字,比如'5''9' 然后str2[i]-'0' 返回它的整数值'3' -&gt; 3
  • 这是一种将 0 到 9 之间的值转换为等效字符的技巧。我怀疑这来自 C++ 代码,因为在任何 .NET 容器中都没有 push_back,更糟糕的是,要从这些字符中获取字符串,您必须在内存中分配一个新字符串。您可能从黑客攻击中获得的任何好处都将丢失
  • 你确定这是 C#,而不是 to C++
  • 更有可能这实际上是 C++ 代码,将字符附加到 std::string。该课程确实有一个push_back
  • @RandRandom 逻辑保持不变。它适用于任何将charstring 区分开来并使用ASCII 表的强类型语言。它适用于 C、C++、C#,可能还有 Java,当然还有许多其他语言

标签: c++ string


【解决方案1】:

实际上是字符零'0'

str[i] - '0' 操作用于将数字的表示转换为数值。

由于从'0''9'的字符在ascii表中,分别具有值4857,当你执行操作'3' - '0'时,解释器将使用ascii 值,51 - 48 == 3,因此您可以将 '3' 转换为 3

ASCII Table

(图片来源:维基百科)

【讨论】:

  • 值得注意的是,这也适用于其他字符代码平板电脑,如 EBCDIC
  • @πάνταῥεῖ 我不知道其他表格,如果您认为可以改写我的答案,使其更通用,并提供更多示例,请随时这样做
【解决方案2】:

'0'字符 零。由于字符是连续的,向0 添加一个数字将产生代表该数字的字符(一旦转换回char)。例如,(char)(2 + '0')(即整数 2 加上字符零)将产生 '2'(即字符 2)。

【讨论】:

  • 似乎不会产生character two,因为我认为这个Console.WriteLine((2 + '0').GetType());会打印System.Char,但这里看不到:dotnetfiddle.net/1pNK0d
  • @RandRandom eap,我的错-您需要将其转换回char,忽略提及:dotnetfiddle.net/9X33o9(也编辑到我的答案中)
【解决方案3】:

str2[i] - '0'

将数字的字符表示形式('3''7''9')转换为其整数值(37、@ 987654327@)。更准确(以及更多冗长)的结构是

(int)char.GetNumericValue(str2[i])

【讨论】:

  • 所以char 数学运算(-, + 我猜)char“转换”为integer
  • @Rand Random: 每个char 实际上都是一些整数(所谓的ascii 码),然而'0' 的ascii 码是48, @987654335 @ 是49 等等。如果我们想得到0 对应'0'5 对应'5',我们必须通过减去'0'(或48)来规范化我们所做的事情
  • 是的,但我不认为它会改变类型,认为它仍然是 char 类型 - 这对我来说是未知的部分
  • @Rand Random:当我们用chars 进行算术运算(比如减法)时,结果将是int
【解决方案4】:

在其他答案中暗示但没有真正说明的是intchar 在c# 中可以被视为相当等价。您可以像在 int 上一样对 char 进行数学运算,并且可以轻松地在 int 和 char 之间来回转换。您获得的数字基于 char 在 utf8 字符表中的位置。

'0' 作为 char 的 int 值为 48,所以你可以这样做:

int x = 7;
char c = x+48; //c would be '7' as a char, or 55 as an int

其他例子:

char c = 'a';

c++;

Console.Write(c); //prints 'b', because 'a' + 1 is b

有时这非常合乎逻辑且相当有用*,但您可能会看到“0”的主要原因是记住“0”比记住 48 更容易(记住十六进制版本 0x30 稍微容易一些)

所有这些都为您提供来自 int 5 的 char 5

char five = 5 + 48;
char five = 5 + 0x30;
char five = 5 + '0';

你觉得哪一个最容易记住? :)


*例如,假设您想计算 ascii 字符串中的字符数,您可以这样做:

var counts = new int[256];
foreach(char c in string)
  counts[c]++;

您可以使用 char 来索引数组,就像使用 int 一样。在操作结束时,“hello world”会在索引 104(h)中放入 1,在索引 108(l)中放入 3,等等。

当然,这些天您可能会使用 Dictionary&lt;char, int&gt;,但欣赏内在的 char/int 等价性以及如何使用它有其优点..

【讨论】:

  • 注意:为了清楚起见,省略了一些演员表
【解决方案5】:

“0”是什么意思?

在 C++ 中,它是 character literal

根本原因为什么/如何str1[i] - '0' 工作是通过促销

尤其是当你写的时候:

str1[i]-'0'

这意味着

str1[i]'0' 都将被提升为 int。所以结果将是一个 int。

让我们看一些示例以获得更多说明:

char c1 = 'E';
char c2 = 'F';

int result = c1 + c2;

这里c1c2 都将升级int。结果将是int。特别是,c1 将变为(升级为)69c2 将变为(升级为)70。所以result 将是69 + 70 这是整数值139

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-29
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-20
    • 2020-01-07
    相关资源
    最近更新 更多