2011-11-14 2 views
2

을 반환합니다.atoi 함수 변환은이 같은 문자 배열이 한 자리 값

 
5  3  0  0  7  0  0  0  0 
6  0  0  1  9  5  0  0  0 
0  9  8  0  0  0  0  6  0 

과 코드는이 날을 반환합니다 : 내가

  for(int i=0;i<27;i++) 
     { 
     inputNumArray[i]=atoi(&inputInitial[indexArray[i]]);   
     } 

사용한 변환을 위해 이제 문제는 내 밖으로 원하는 넣어이다

 
53  3  0  0  7  0  0  0  0 
6  0  0  195  95  5  0  0  0 
0  98  8  0  0  0  0  6  0 

나는 이유가 있다고 가정 atoi가 문자를 찾을 때까지 스캔하고 atoi (& inputInitial [i])은 i + 1, i + 2 ...까지 읽습니다. 그래서 그것은 오류가 발생할 때까지. atoi 스캐닝을 한 문자로만 제한하려고합니다. 가능합니까 아니면 다른 기능을 사용해야합니까?

답변

8

는이를 사용 atoi 함수를 사용하지 마십시오.

int ctoi (char ch) { 
    if (ch >= '0' && ch <= '9') return ch - '0'; 
    return -1; // error 
    } 
+0

내가 (isdigit에 (C)) (C-'0 ')을 제안 할 것이다 : 그러나, 여기에 내가 배열을 위해 할 것입니다 무엇 0하지만이 하나 ^^ 내가 부족 – BenjaminB

+0

괜찮습니다 세미콜론과 당신은하지 않으므로 당신의 것이 더 낫습니다 ... typedef1이 분명히 C 초심자이기 때문에 나는 더 사용하기 쉽다고 생각했습니다. 적어도 내 공식적인 변명이긴하지만, 필자의 장기간의 Python 머물일지도 모른다. – zmbq

+1

val = isdigit (c)? c-'0 ': 0; 나는 믿는다. –

0

당신은 약 atoi에 해당합니다. 단일 숫자가 변환하려는 경우, 당신은 단지 포함 된 문자열을 만들 수 있습니다

char temp[2] = { inputInitial[indexArray[i]], '\0'); 
inputNumArray[i] = atoi(temp); 
0

당신이 일시적으로 문자열에서 0으로 다음 문자의 값을 변경할 수 있습니다 그래서 난 단지 하나 개의 숫자를 읽습니다.

if(isdigit(c)) 
    val = c - '0'; 
else 
    val = 0 
0

atoi 함수는 문자의 널 (null) 종료 순서를 예상 :

0

입력 형식은 나에게 분명하지 않다 :

더 나은처럼 하나의 문자를 취 자신의 함수를 작성합니다. ?

char x[] = "12345678"; 
int out[] = new out[strlen(x)]; 

int* oit = out; 
for (char* it=x; it < x+sizeof(x);) 
    *oit++ = (*it++)-'0' 


// out[] now contains char-by-char value as int