【问题标题】:Trying to re-index ASCII to 0,1,2,34, etc尝试将 ASCII 重新索引为 0、1、2、34 等
【发布时间】:2021-04-12 05:59:20
【问题描述】:

我正在尝试重新索引我的字母表中的 ASCII 十进制字符,以便它们以 'A' 而不是 65 从 0 开始,以便我可以使用某个公式。

我最初的想法是创建一个字母字符串并对其进行迭代,在每次迭代中减去负 65,然后我意识到这只会对字符串产生影响(无论如何都会产生段错误)并且没有任何对实际字符十进制值的影响:

 string alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";    
  
 for (int k = 0, length_ = strlen(alphabet); k < length_ ; k ++)
 {
      alphabet[k] = alphabet[k] - 65;
      printf("Alphabet no.%i is equal to %c", k, alphabet[k]);
 }

有什么想法吗?

【问题讨论】:

  • C 没有标准的string。请发帖Minimal, Reproducible Example
  • 如果您使用的是 CS50,这似乎是相关的:c - What is the difference between char s[] and char *s? - Stack Overflow
  • 您的代码毫无意义,您应该直接声明像string alphabet = {0,1,2,3,4,...} 这样的数组,或者更好地直接构造它,但无论如何,您实际上要做什么还不清楚. “重新索引 ASCII”不是很有意义。这看起来像 XY Problem
  • alphabet[k] = alphabet[k] - 65; 正在尝试更改只读的 字符串文字。即使可以,更改后的字符串也会在找到字符 65 时终止。同样“没有效果” - 当您到达字母 'a' 时会终止。
  • 此外,切勿在程序中使用常量65 来表示字符“A”的值,除非您正在编写一个使用混合字符编码(例如 ASCII 和 EBCDIC)的程序。要在程序中使用特定字符的代码,请使用字符常量,例如 'A' 用于“A”的代码。这既使您的程序更具可移植性,又使读者更容易看到意图。

标签: arrays c for-loop ascii


【解决方案1】:
void printAlpha(int i){
    if(i < 26)
        printf("%c", 'A' + i);
    else if(i < 52)
        printf("%c", i - 26 + 'a');
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 2013-08-17
    • 2021-12-14
    • 2022-11-13
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多