【发布时间】:2021-08-05 12:30:55
【问题描述】:
我想让 A 变为 1,...,Z 变为 26。 我的代码可以使 A 变为 1,但不能使 J -> 10 , ... , Z -> 26。请告诉我如何更改我的。
void changeToDigitEncode(char s[], char e[]) {
int i;
int eIndex = 0;
for (i = 0; s[i] != '\0'; i++) {
e[eIndex] = s[i]-'A'+'0'+1;
eIndex++;
}
e[eIndex] = '\0';
}
int main(void) {
char sentence[20], encoded[40];
scanf("%s", sentence);
changeToDigitEncode(sentence, encoded);
printf("%s\n", encoded);
}
【问题讨论】:
-
你能解释一下
'A'+'0'+1背后的逻辑吗? -
您正在对单个字符进行 ASCII 算术运算。您不能将 10 存储在单个字符中。请显示您的输入、输出以及您期望的输出。
-
不清楚你想要什么,但也许这很接近:
sprintf(&e[2*eIndex], "%02d", s[i]-'A'+1); -
编码后的字符串在 1 到 26 的范围内,所以大部分是不可打印的字符。
-
您不能将
10(或26)放入单个字符中;你需要两个字符。