C 尝试根据字符在字母表中的位置将字符串的元素转换为数字

C 尝试根据字符在字母表中的位置将字符串的元素转换为数字,c,arrays,string,C,Arrays,String,我正试着用字符串字符[256]=早餐午餐晚餐;并根据每个字符在字母表中的位置将其转换为一个数字,即B=2、f=6、l=12等 以下是我目前的代码: void main() { char theString[256] = "BreakfastLunchDinner"; } void firstLast(char theString[], char *first, char *last) { int i = 0; int num[256]; while(theSt

我正试着用字符串字符[256]=早餐午餐晚餐;并根据每个字符在字母表中的位置将其转换为一个数字,即B=2、f=6、l=12等

以下是我目前的代码:

void main()
{
    char theString[256] = "BreakfastLunchDinner";
}

void firstLast(char theString[], char *first, char *last)
{
    int i = 0;
    int num[256];

    while(theString != '\0')
    {
            if(theString[i] >= 'A' && theString[i] <= 'Z')
            {
            num[i] = theString[i] - 'A';
            }
            else if(theString[i] >= 'a' && theString[i] <= 'z')
            {
            num[i] = theString[i] - 'a';
            }
            i++;
    }
}
我已经在主函数中包含了声明,以尽可能地详细说明,指针供以后使用,目前我主要关注上面解释的转换方面。当我试图在一个单独的程序中单独运行firstLast函数时,我从编译器中转储了segmentation fault core。非常感谢您提供的任何帮助。

由于该字符串从未更改,循环将永远不会终止,并且字符串[i]可能会冒险离开它不应该去的地方,从而导致故障

你的测试应该是字符串[i]!='\0.

由于管柱从不改变,回路将永远不会终止,管柱[i]可能会冒险离开它不应该去的地方,从而导致segfault


你的测试应该是字符串[i]!='\0.

你说B=2,所以你需要num[i]=字符串[i]-'A'+1;而且它只适用于连续的字母编码,这是不能保证的。@WeatherVane:All hail EBCDIC@ScottHunter那是给你的@风向标在这种情况下,哪种方法更好更一致?对于转换。您可以准备一个查找表,以字母作为索引。int lookup[256]={/*…某些值…*/1、2、3、4、/*等*/};然后value=lookup[theString[i]];但是您必须确保字符对于大于0x7F的值是无符号的。您说B=2,所以需要num[i]=字符串[i]-'A'+1;而且它只适用于连续的字母编码,这是不能保证的。@WeatherVane:All hail EBCDIC@ScottHunter那是给你的@风向标在这种情况下,哪种方法更好更一致?对于转换。您可以准备一个查找表,以字母作为索引。int lookup[256]={/*…某些值…*/1、2、3、4、/*等*/};然后value=lookup[theString[i]];但是您必须确保对于大于0x7F的值,字符是无符号的。