2011-11-14 7 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スキャンを1文字に制限したいと思っています。他の機能を使用することはできますか?

答えて

8

はこれを使用し、atoi関数を使用しないでください。

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

私は(C-'0' )(isdigit(C))を提案している必要があります:^^ – BenjaminB

+0

私は欠けている0しかし、この1つはokです?セミコロンとセミコロンはないので、あなたの方が良いです... 私は使っていませんか?: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

税引後営業利益は、NULLで終わる文字のシーケンスを期待:

0

入力フォーマットは、私には明らかではない。

ベターのように、単一のcharを取り、独自の関数を記述します。しかし、ここで私は、配列のために行うだろう何:

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 
関連する問題