【发布时间】: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”的代码。这既使您的程序更具可移植性,又使读者更容易看到意图。