преобразование atoi для возврата однозначного значения - PullRequest
2 голосов
/ 14 ноября 2011

У меня есть массив символов, подобный этому:

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

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

            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

Iпредположим, что причина в том, что atoi сканирует, пока не находит символ, и для atoi (& inputInitial [i]) он будет считывать до i + 1, i + 2 ... и так далее, пока не обнаружит ошибку.Я хочу ограничить сканирование atoi только одним символом.Это возможно, или я должен использовать какую-то другую функцию?

Ответы [ 5 ]

8 голосов
/ 14 ноября 2011

Не используйте atoi, просто используйте это:

if(isdigit(c))
    val = c - '0';
else
    val = 0
0 голосов
/ 14 ноября 2011

Формат ввода мне не понятен.Однако вот что я бы сделал для массива:

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
0 голосов
/ 14 ноября 2011

atoi ожидает последовательность символов с нулевым символом в конце.

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

int ctoi ( char ch ) {
    if ( ch >= '0' && ch <= '9' ) return ch - '0';
    return -1; // error
    }
0 голосов
/ 14 ноября 2011

вы можете временно изменить значение следующего символа на 0 в вашей строке, чтобы я просто читал одну цифру.

0 голосов
/ 14 ноября 2011

Вы недовольство о atoi правильно. Если вы хотите, чтобы одна цифра была преобразована, вы можете создать строку, содержащую только это:

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