我想让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] != ' '; i++) {
e[eIndex] = s[i]-'A'+'0'+1;
eIndex++;
}
e[eIndex] = ' ';
}
int main(void) {
char sentence[20], encoded[40];
scanf("%s", sentence);
changeToDigitEncode(sentence, encoded);
printf("%sn", encoded);
}
通常你可以这样做:
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
正如注释所指出的,您不能将大多数整数存储为单个字符。而字符数组元素是单个字符。因此,您必须创建一个整型数组并将值存储在其中。
加上,它将是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] != ' '; 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]);
}
}
试试这段代码,把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]!=' ')
{
int num=ip[i];
num-=64;
sprintf(temp, "%d", num);
k=0;
while(temp[k]!=' ')
{
op[j++]=temp[k++];
}
i++;
}
op[i]=' ';
printf("-->%sn",op);
只适用于大写