如何在 C 语言中获取字符在字母表中的位置?

Posted

技术标签:

【中文标题】如何在 C 语言中获取字符在字母表中的位置?【英文标题】:How to get character's position in alphabet in C language? 【发布时间】:2010-12-09 15:46:48 【问题描述】:

有没有一种快速的方法来检索给定字符在 C 中英文字母表中的位置?

类似:

int position = get_position('g');

【问题讨论】:

【参考方案1】:
int position = 'g' - 'a' + 1;

在 C 中,char 值可转换为 int 值并采用其 ASCII 值。在这种情况下,'a' 与 97 相同,'g' 为 103。由于字母在 ASCII 字符集中是连续的,因此从您的值中减去 'a' 即可得出其相对位置。如果您认为'a' 是第一个(而不是第零个)位置,则添加 1。

【讨论】:

请注意,ASCII 不是 C 标准的一部分。它几乎无处不在,足以在您几乎可以找到的任何系统上工作。该标准保证数字在字符集中是连续的,但不是字母表(如果是 EBCDIC,这会让您感到困惑,但说真的,谁再关心 EBCDIC 了?)。 我爸爸还在 COBOL 中使用 EBCDIC。他维护波音的东西。 -_- 所以 A 是字母表中的第 -31 个字母? 如何以相反的顺序打印字母数字,例如.. 1 代表 z,2 代表 y 等等。【参考方案2】:

您还应该考虑大写/小写。根据我的经验,从 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;
   

【讨论】:

您可以通过在ctype.h 标头中使用tolower()toupper() 来简化它,这样您就不必同时检查大小写。 我很欣赏这个答案,因为它考虑了案例。众所周知,在许多逻辑上下文中,“A”与“a”非常不同。【参考方案3】:

这将适用于 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。

【讨论】:

【参考方案4】:

输入字母表:

scanf("%c",ch);

只需从字符的 ascii 值中减去 96。这可以在 printf 参数中完成:

printf("%d",ch-96);

【讨论】:

以上是关于如何在 C 语言中获取字符在字母表中的位置?的主要内容,如果未能解决你的问题,请参考以下文章

Matlab之如何截取字符串及获取位置

c语言中如何在一个字符串中查找/出现的位置?需要第一次出现和第二次出现中间的内容和第二次出现和第三

c#如何把字符串中的指定字符删除

c语言 查找最大元素

c语言中如何在一个字符串里搜索出其中的字母和数字啊?谢谢

在 C语言中字符串的替换如何实现的!