-3

如何将用户给出的短语转换为数字而不是 ASCII 表?例如,我有短语 HELLO WORLD 并且我有一个数组,其中 <> 为 0,A 为 1,B 为 2,等等。请帮助!我的问题是我找不到比较两个数组的方法。我已经开始了我的代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char  text[]={'         ','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','.',',',':','?'};
char number[125];

main(){
    int i,j;
    printf("Enter a message to encode:");
    gets(number);
}

但我有问题继续它

4

2 回答 2

1

每个 char 基本上都是一个较小的 int。该值是来自对每个字母进行编码的ascii图表中的值。如您所见,这些字母位于 2 个连续的块中(一个用于大写字母,一个用于小写字母)。因此,为了使您的结果正确,您需要将所有字母转换为相同的大小写。您可以使用tolowertoupper函数。然后,您只需减去字母 a 的值,并对特殊字符进行一些检查。

你可以从这个开始:

   main(){
       int i,j;
       printf("Enter a message to encode:");
       gets(number);
       int codes[125];
       for(int i = 0; i<strlen(number); i++){
           codes[i] = toupper(number[i]) - 'A' + 1;    // note that 'A' represents the code for letter A. 
                                                       // +1 is because you want A to be 1.
       }
   }

请注意,这只是一个指南,您需要添加我上面解释的其他功能。在这种情况下,数值结果存在于代码中。

于 2013-11-18T11:33:45.050 回答
0

首先,在末尾添加一个空字符text

char  text[]={'         ','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','.',',',':','?','\0'};

用于strchr查找文本中字符的位置。

for(int i = 0; i < strlen(number); i++){
    int loc = (int)(strchr(text, number[i]) - &text[0]);
    // save the loc in another array or do whatever you want.
}

number您还应该确保('a'输入中没有无效字符,因为text仅包含大写字符)。

于 2013-11-18T11:55:15.707 回答