【问题标题】:What is the order of characters when looping through循环时字符的顺序是什么
【发布时间】:2018-01-24 21:48:45
【问题描述】:

好的,所以这很难用语言表达。所以我有一些代码:

vector <char> Chars;
for(char c = '0'; c <='z'; c++) {
    Chars.push_back(c);
}

因此它有助于将字符添加到我的角色vector,因为它会添加选择数量。示例:

vector <char> Chars;
for(char c = '0'; c <='9'; c++) {
    Chars.push_back(c);
}

为您提供 0123456789 和:

vector <char> Chars;
for(char c = '0'; c <='Z'; c++) {
    Chars.push_back(c);
}

给你 0123456789:;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ。我怎样才能(a)获取所有字符和(b)这个顺序是什么?为什么数字后面有一些符号而不是全部?

【问题讨论】:

  • ascii,但我相信 C++ 对确切的字符编码没有太多要求(即不必是 ascii)。虽然在实践中,我不知道是否有任何平台不会是ascii
  • @Justin:还有 EBCDIC 代替 Ascii(即使没有真正使用)。
  • 由于您使用的是文字字符(当然正确地告诉您的编译器源字符编码),有问题的字符编码就是您告诉它用作执行字符编码的任何内容(gcc @987654323 @; msvc:/execution-charset)。两者都不太可能是 ASCII。也许是 UTF-8。也许是 Windows-1252。无论是什么,您都可以控制并与您的用户签订合同。

标签: c++ for-loop vector


【解决方案1】:

(b) 这个顺序是什么?

这是您使用的系统的本机字符编码中指定的顺序。它可能是 ASCII、ISO/IEC 8859 或 UTF-8 之一,它们在 [0, 128) 范围内都是相同的。

为什么数字后面有一些符号而不是全部?

因为有些符号在数字之前,有些在字母之后。

这只是设计编码的任何委员会选择的顺序。这种选择背后不一定有深刻的哲学。这可能是从计算机系统之前的电传打字代码继承而来的异常。

我怎样才能(a)获得所有字符

您可以使用数值限制来查找最小值和最大值,并使用循环对其进行迭代:

for(int i = std::numeric_limits<char>::min();
        i < std::numeric_limits<char>::max(); i++) {
    char c = i;
    Chars.push_back(c);
}

【讨论】:

    【解决方案2】:

    我认为以下内容会对您有所帮助:

    这意味着,如果您从“0”字符开始循环,则对应于该表中的数字 48。您只是从那里递增并一直上升到“Z”。如果您只想要字母数字字符,只需将循环分成两部分。

    【讨论】:

      【解决方案3】:

      每个字符都有一个 ASCII 码。

      https://en.wikipedia.org/wiki/ASCII

      碰巧有一些符号,但并非所有符号都位于“9”和“A”之间。

      正如其他人所指出的,甚至可能无法保证该表中的哪些符号。但我猜 'A' 到 'Z'、'a' 到 'z' 和 '0' 到 '9' 保证是连续的。

      另外,请参阅: Does C and C++ guarantee the ASCII of [a-f] and [A-F] characters?

      【讨论】:

        猜你喜欢
        • 2013-01-04
        • 2013-01-04
        • 2018-03-24
        • 2021-12-10
        • 1970-01-01
        • 2023-02-20
        • 1970-01-01
        • 2021-09-30
        • 2010-12-13
        相关资源
        最近更新 更多