将初始数字映射到所有字母

时间:2016-06-14 17:01:43

标签: c numbers mapping assign letters

[关于这个问题,他们要求将数字分配给字母] [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;
}

提前致谢。

3 个答案:

答案 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-90a-z范围为97-122。因此,要将字符转换为数字,您可以使用:

对于大写字母:ch - 64ch - 'A' + 1
小写:ch - 96ch - 'a' + 1

A映射到1B映射到2 ...等等 和a1b2 ......等等

如以下程序所示:

#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);
}