[关于这个问题,他们要求将数字分配给字母] [1]
问题:
假设我们将得分1分配给字符A,将2分配给B和 通过重复相同的规则从26到Z。使用此规则映射的分数,得分的总和 “运气”是47(12 + 21 + 3 + 11),“知识”是96,“Hardwork”是98,“态度”是100。 完成以下程序,该程序计算任意字符串。
#include <stdio.h>
int main() {
char str[1000];
int i, score = 0;
scanf("%s", str);
for (i = 0; ______; ___)
{
int ch = str[i];
if (______________________) {
score += ____________;
}
else if (______________________) {
score += ____________;
}
}
printf("%d\n", score);
return 0;
}
提前致谢。
答案 0 :(得分:1)
这个问题的关键见解是char实际上是一个8位数字。例如,&#39; a&#39;是十进制的97,&#39; z&#39;是122,&#39; A&#39;是65岁,&#39; Z&#39;是90:
https://en.wikipedia.org/wiki/ASCII#Code_chart
所有字母字符按顺序表示。因为char实际上是一个数字,所以你可以在算术表达式中使用它,如下所示:
int num = 'd' - 'a'; //num is now (100 - 97), which is 3.
这应该足以说明他们希望你在这个问题上做些什么。
答案 1 :(得分:1)
你可以通过只使用两个条件来有效地做到这一点:
if (string[i]>='a' && string[i]<='z') {
Score += (int) string[i] - (int) 'a' + 1;
}
编辑:不需要int强制转换,但我把它们放在那里,这样你就可以知道字符被用作整数
对于第二个条件,您可以大写相同。 这应该有用。
答案 2 :(得分:1)
请检查this表。 A-Z
的ASCII值范围为65-90
,a-z
范围为97-122
。因此,要将字符转换为数字,您可以使用:
对于大写字母:ch - 64
或ch - 'A' + 1
小写:ch - 96
或ch - 'a' + 1
将A
映射到1
,B
映射到2
...等等
和a
到1
,b
到2
......等等
如以下程序所示:
#include<stdio.h>
int main(){
char str[1000];
int i, score = 0;
printf("Please enter a string: ");
scanf("%s", str);
printf("You entered: %s\n", str);
for( i=0; str[i] != '\0' ; i++ ) {
int ch = str[i];
int num;
if (ch >= 'A' && ch <='Z'){
num = ch -'A' + 1;
// num = ch - 64;
}
else if (ch >= 'a' && ch <= 'z'){
num = ch -'a' + 1;
// num = ch - 96;
}
score += num;
}
printf("Score: %d\n", score);
}