2015-01-12 6 views
0

"A5-B2"(범위 : AG 1-7) 그래서 CHAR * 입력 = "A5-B2" 과 내가 각 데이터 이렇게지지 할 :C에 char 포인터의 정수 저장? 재생기 입력 경우

int x1 = 1 (since A should be 1) 
int y1 = 5 
int x2 = 2 (if A=1, then B=2 and so on) 
int y2 = 3 

그래서 나는 b2에서 a5를 분리하는 strtok을 사용할 수 있다는 것을 알았지 만 어떻게 5에서 분리하고 2에서 b를 분리합니까? 알파벳은 다음과 같이 사용에 대한 별도의 변수에 입력을 받고 후

+0

플레이어는 일반적으로 무엇을 입력 할 수 있습니까? 9보다 큰 숫자는? 여러 문자 "AC4-D3"? – ryanpattison

+0

문자 : ABCDEFG 숫자 : 1234567 –

+0

"구문 분석" –

답변

2

사용 sscanf에서,이에

int sscanf(const char *str, const char *format, ...); 

,

sscanf(input,"%c%d-%c%d",&ch1,&int1,&ch2,&int2); 

. 'A'

int3=ch1-'A' + 1; 
int4=ch2-'A' + 1; 

아스키 값은 1 그래서 'A'에 의해 빼고 변수에 그렇게 1로 그 줄 하나, 상점을 추가하는 것이 필요 65입니다. 소문자 인 경우 'a' +1으로 뺍니다. 당신이 다음 ASCII로 사용자를 제한하고 char * input = "A5-B2"를 들어, 당신이 직접 배열의 요소로 개별 문자 코드에 액세스 할 수 있다면 char * 이후

+0

이 "A5-B2"란 무엇입니까? sscanf()에? – Gopi

0

는 문자 배열을 정의

input[0] = 65 
input[1] = 53 
input[2] = 45 
input[3] = 66 
input[4] = 50 

모든 자리가 withing에 가을 48 57, 대문자 65-90 및 소문자 97-122

단순히 문자 코드가 떨어지는 범위를 기반으로하고 원하는 값을 저장합니다.

0

가장 간단한 방법은 입력 한 글자가 고정 길이이고 대문자와 한자리 숫자로 된 간단한 형식이므로 각 문자를 원하는 정수로 변환하는 것입니다.

#include <stdio.h> 

int main() { 
    int x1, x2, y1, y2; 
    char input[] = "A2-B3"; 

    x1 = input[0] - 'A' + 1; /* convert A -> 1, B -> 2 ... */ 
    y1 = input[1] - '0';  /* convert ASCII digit characters to integers '0' -> 0 ... */ 
    x2 = input[3] - 'A' + 1; 
    y2 = input[4] - '0'; 

    if (x1 < 1 || y1 < 1 || x2 < 1 || y2 < 1 
     || x1 > 7 || x2 > 7 || y1 > 7 || y2 > 7 
     || input[2] != '-') { 
     /* error: invalid input */ 
     printf("Invalid string\n"); 
    } else { 
     printf("x1=%d y1=%d x2=%d y2=%d\n", x1, y1, x2, y2); 
    } 
    return 0; 
}