是否有一个快速的方法来检索在C中的英文字母给定字符的位置?
就像是:
int position = get_position('g');
是否有一个快速的方法来检索在C中的英文字母给定字符的位置?
就像是:
int position = get_position('g');
int position = 'g' - 'a' + 1;
在C语言中, char
值转换为int
价值,并采取他们的ASCII值。 在这种情况下, 'a'
是相同的97和'g'
是103由于字母是ASCII字符集内相邻的,减去'a'
从你的值给出了它的相对位置。 加1,如果你认为'a'
是第一个(而不是零)的位置。
这将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如果你想运行它。
你也应该可能考虑大/小写。 在我的豁达,从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;
}
}