문제

이 있는 빠른 방법을 검색어는 캐릭터의 위치는 영어 알파벳 C?

다음과 같습니다.

int position = get_position('g');
도움이 되었습니까?

해결책

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

C 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 하려면 실행합니다.

당신은 또한 아마 계정에 상한/하한 경우입니다.내 expereince 에서 계산,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;
   }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top