如何获得在C语言中字母字符的位置?(How to get character's posit

2019-08-31 21:46发布

是否有一个快速的方法来检索在C中的英文字母给定字符的位置?

就像是:

int position = get_position('g');

Answer 1:

int position = 'g' - 'a' + 1;

在C语言中, char值转换为int价值,并采取他们的ASCII值。 在这种情况下, 'a'是相同的97和'g'是103由于字母是ASCII字符集内相邻的,减去'a'从你的值给出了它的相对位置。 加1,如果你认为'a'是第一个(而不是零)的位置。



Answer 2:

这将EBCDIC工作,不区分大小写:

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

int getpos (char c)
{
    int pos;
    const char * alphabet = "abcdefghijklmnopqrstuvwxyz";
    const char * found;

    c = tolower ((unsigned char)c);
    found = strchr (alphabet, c);
    pos = found - alphabet;
    if (!found)
        pos = 0;
    else if (pos == 26)
        pos = 0;
    else
        pos++;
    return pos;
}

int main ()
{
    char tests[] = {'A', '%', 'a', 'z', 'M', 0};
    char * c;
    for (c = tests; *c; c++) {
        printf ("%d\n", *c - 'a' + 1);
        printf ("%d\n", getpos (*c));
    }
    return 0;
}

见http://codepad.org/5u5uO5ZR如果你想运行它。



Answer 3:

你也应该可能考虑大/小写。 在我的豁达,从1计数,往往是危险的,因为它会导致关闭的情况的一个错误。 作为一个经验法则我总是转换到基于1的索引与用户交互时,才和使用基于0计数内部,以避免混淆。

int GetPosition(char c)
{
   if (c >= 'a' && c <= 'z') {
      return c - 'a';
   }
   else if (c >= 'A' && c <= 'Z') {
      return c - 'A';
   }
   else  {
      // Indicate that it isn't a letter.
      return -1;
   }
}


文章来源: How to get character's position in alphabet in C language?
标签: c char ascii