У меня есть вспомогательная функция в моей программе, которая
long parse_int (char * cp, int * i)
{
/*
Helper function
cp: Pointer to a character array that is a base-10 string representation of an integer
i: Pointer to an integer which will store the output of the parsing of cp
Returns the number of characters parsed.
*/
long n = 0;
*i = 0;
while (cp!= '\0')
{
char c = *cp;
long k = index_of(digits, c);
if (k > -1)
{
n = n * 10 + k;
}
else
{
break;
}
++cp;
}
return n;
}
где вещи, используемые внутри него
long index_of (char * pc, char c)
{
/*
Helper function
pc: Pointer to the first character of a character array
c: Character to search
Returns the index of the first instance of
character c in the character array str. If
none is found, returns -1.
*/
char * pfoc = strchr(pc, c); /* Pointer to the first occurrence of character c */
return pfoc ? (pfoc - pc) : -1;
}
а также
char digits [] = "0123456789";
Если возможно, я хотел бы сократить объем кода, максимально используя огневую мощь стандартной библиотеки. Я полностью осведомлен о atoi
, но проблема в том, что я не могу вызвать его и восстановить количество символов, которые он проанализировал при вызове. Какие-либо предложения?