كيف تحصل على موقف الشخصية في Alphabet باللغة C؟
سؤال
هل هناك طريقة سريعة لاسترداد موقف الشخصية المعطاة في الأبجدية الإنجليزية في ج؟
شيء مثل:
int position = get_position('g');
المحلول
int position = 'g' - 'a' + 1;
في ج ، char
القيم قابلة للتحويل إلى int
القيم واتخاذ قيم ASCII الخاصة بهم. في هذه الحالة، 'a'
هو نفس 97 و 'g'
هو 103. بما أن الأبجدية متجاورة داخل مجموعة أحرف ASCII ، وطرح 'a'
من قيمتك يعطي موقفه النسبي. أضف 1 إذا كنت تفكر 'a'
أن تكون أول موقف (بدلاً من Zeroth).
نصائح أخرى
سيعمل هذا مع 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 فقط عند التفاعل مع المستخدم ، واستخدم العد على أساس 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;
}
}