2011-11-14 3 views
2

У меня есть массив символов, как это:преобразования atoi возвращать одно значение цифры

 
+---+---+---+ 
|53.|.7.|...| 
|6..|195|...| 
|.98|...|.6.| 
+---+---+---+ 

Я использую целочисленный массив для хранения конкретных значений в определенных индексах. Для преобразования я использовал

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

теперь проблема моя желательно из пут:

 
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 

и код возвращает меня это:

 
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, просто используйте:

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

Я бы предложить (isdigit (с)) (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 в строке так, чтобы я просто читает одну цифру.

0

atoi ожидает нулевую прекращаются последовательность символов.

Лучше написать свою собственную функцию, которая принимает один символ, например:

int ctoi (char ch) { 
    if (ch >= '0' && ch <= '9') return ch - '0'; 
    return -1; // error 
    } 
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