【问题标题】:How can I make z to 26?我怎样才能使z变为26?
【发布时间】: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)放入单个字符中;你需要两个字符。

标签: c ascii


【解决方案1】:

通常你可以这样做:

int a_lower = 'a' - 'a' + 1; // value : 1
int j_lower = 'j' - 'a' + 1; // value : 10

对于大写字母,类似的事情:

int a_upper = 'A' - 'A' + 1; // value : 1
int j_upper = 'J' - 'A' + 1; // value : 10

【讨论】:

    【解决方案2】:

    正如评论指出的那样,您不能将大多数整数存储为单个字符。而字符数组元素是单个字符。因此,您必须创建一个整数数组并将值存储在那里。

    另外,它只是s[i]-'A'+ 1

    我添加的另一件事是encoded 数组的终止条件,它是数字 0,因为没有字母会给出数字 0。

    #include <stdio.h>
    
    void changeToDigitEncode(char s[], int e[]) {
        int i;
        int eIndex = 0;
        for (i = 0; s[i] != '\0'; i++) {
            e[eIndex] = s[i]-'A'+1;
            eIndex++;
        }
        e[eIndex] = 0;
    }
    
    int main(void) {
        char sentence[20]; 
        int encoded[20];
    
        scanf("%s", sentence);
        changeToDigitEncode(sentence, encoded);
        
        for(int i=0; encoded[i]!=0; i++) {
            printf("%d ",encoded[i]);
        }
    }
    

    【讨论】:

      【解决方案3】:

      尝试此代码,将 ip[] 视为您的 s[],将 op[] 视为您的 e[]

      char ip[] = "ABC";
          char op[3];
          char temp[50];
      int i=0;
      int j=0;
      int k=0;
      while(ip[i]!='\0')
      {
          int num=ip[i];
          num-=64;
      
          sprintf(temp, "%d", num);
          k=0;
          while(temp[k]!='\0')
          {
              op[j++]=temp[k++];
              
          }
      
          i++;
      }
      op[i]='\0';
      printf("-->%s\n",op);
      

      这仅适用于大写字符串

      【讨论】:

      • 这会将 AZ 转换为 126
      猜你喜欢
      • 2022-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-28
      • 2014-01-28
      • 1970-01-01
      • 2022-07-07
      • 1970-01-01
      相关资源
      最近更新 更多