【问题标题】:Mapping the inital numbers to all of letters将初始数字映射到所有字母
【发布时间】:2016-10-15 13:05:18
【问题描述】:

[在这个问题上,他们要求将数字分配给字母][1]

问题:

假设我们将分数 1 分配给字符 A,2 分配给 B,并且 26 到 Z 通过重复相同的规则。使用此规则映射的分数,分数的总和为 “运气”是47(12+21+3+11),“知识”是96,“努力”是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;
}

提前致谢。

【问题讨论】:

  • 点击主题顶部的链接。
  • @CherubimAnand 我早上要考试,现在是凌晨 2 点 18 分,现在我已经学习了将近 13 个小时,请在评判某人之前谦虚和慷慨。谢谢先生
  • @CherubimAnand 感谢您的反馈。
  • 要确定字符串的大小(循环)使用 sizeof(string)/sizeof(int);对于条件句,您可以使用将 char 转换为 int ,如下所示: (int) string[i]

标签: c numbers mapping assign letters


【解决方案1】:

请查看this 表。 A-Z 的 ASCII 值范围为 65-90a-z 的范围为 97-122。因此,要将字符转换为数字,您可以使用:

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

这会将A 映射到1B2 ... 等等
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);
}

【讨论】:

    【解决方案2】:

    您可以通过仅使用两个条件来有效地做到这一点,如下所示:

    if (string[i]>='a' && string[i]<='z') {
        Score += (int) string[i] - (int) 'a' + 1;
    }
    

    编辑:不需要 int 强制转换,但我把它们放在那里,这样你就可以知道这些字符被用作 int

    对于第二个条件,您可以在大写中执行相同的操作。 这应该可以。

    【讨论】:

      【解决方案3】:

      这个问题的关键见解是 char 实际上是一个 8 位数字。例如,'a' 是十进制的 97,'z' 是 122,'A' 是 65,'Z' 是 90:

      https://en.wikipedia.org/wiki/ASCII#Code_chart

      所有字母字符都按顺序表示。因为 char 实际上是一个数字,所以您可以在算术表达式中使用它,如下所示:

       int num = 'd' - 'a'; //num is now (100 - 97), which is 3.
      

      这应该是足够的信息来弄清楚他们希望你在那个问题中做什么。

      【讨论】:

      • 我应该补充一点,ASCII 只使用 7 位。尽管如此,char 数据类型是 8 位。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-23
      • 2012-11-01
      相关资源
      最近更新 更多