Cで英語のアルファベットで特定の文字の位置をすばやく検索する方法はありますか?C言語でアルファベットで文字の位置を取得する方法は?
ような何か:Cで
int position = get_position('g');
Cで英語のアルファベットで特定の文字の位置をすばやく検索する方法はありますか?C言語でアルファベットで文字の位置を取得する方法は?
ような何か:Cで
int position = get_position('g');
int position = 'g' - 'a' + 1;
、char
値はint
値に変換可能であり、それらのASCII値を取ります。この場合、'a'
は97と同じで、'g'
は103です。アルファベットはASCII文字セット内で連続しているため、値から'a'
を引いたものが相対位置を与えます。 'a'
を最初の(ゼロの代わりに)位置と見なす場合は1を加えます。
大文字と小文字も考慮する必要があります。私のexpereinceでは、1から数えて、それはoff-by-oneバグにつながる可能性があるので、しばしば危険です。経験則として、私は常にユーザーと対話するときにのみ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() 'を使って簡略化すると、大文字と小文字の両方をチェックする必要はありません。 –
これは、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 strchr! 4321 –
ありがとうございました – goe
ASCIIはC標準の一部ではありません。あなたが実際に見つけることができるシステム上で動作するには、これはほんの遍在しています。標準では、数字は文字セット内で連続していますが、アルファベットではないことが保証されています(EBCDICの場合は混乱しますが、真剣にEBCDICを気にします)。 –
私のお父さんはまだCOBOLでEBCDICを使用しています。彼はボーイングを維持している。 -_- – GManNickG