Как разобрать целое число до string(char* || char[])
в C? Существует ли эквивалент метода Integer.parseInt(String)
из Java в C?
Разбор целых чисел в String C
Ответ 1
Если вы хотите преобразовать целое число в строку, попробуйте функцию snprintf()
.
Если вы хотите преобразовать строку в целое число, попробуйте выполнить функцию sscanf()
или atoi()
или atol()
.
Ответ 2
Чтобы преобразовать int в строку:
int x = -5;
char buffer[50];
sprintf( buffer, "%d", x );
Вы также можете сделать это для парных:
double d = 3.1415;
sprintf( buffer, "%f", d );
Чтобы преобразовать строку в int:
int x = atoi("-43");
См. http://www.acm.uiuc.edu/webmonkeys/book/c_guide/ для документации этих функций.
Ответ 3
Похоже, у вас есть строка и вы хотите преобразовать ее в целое число, судя по упоминанию parseInt
, хотя это не совсем понятно из вопроса...
Для этого используйте strtol
. Эта функция немного сложнее, чем atoi
, но взамен она дает более четкое представление об ошибках, поскольку она может заполнить указатель (который предоставляет вызывающий) с адресом первого символа, который запутался. Затем вызывающий может проверить нарушающий символ и решить, была ли строка действительной или нет. atoi
, напротив, просто возвращает 0, если он потерялся, что не всегда полезно - хотя, если вы довольны этим поведением, вы также можете его использовать.
Ниже приведен пример использования strtol
. Проверка на ошибку очень проста: если первым нераспознанным символом не был '\x0'
, который заканчивает строку, то считается, что строка не содержит допустимого int.
int ParseInt(const char *s,int *i)
{
char *ep;
long l;
l=strtol(s,&ep,0);
if(*ep!=0)
return 0;
*i=(int)l;
return 1;
}
Эта функция заполняет * я целым числом и возвращает 1, если строка содержит допустимое целое число. В противном случае он возвращает 0.
Ответ 4
Это обсуждается в часто задаваемых вопросах Стива Саммита C.
Ответ 5
Функция Java parseInt()
анализирует строку, чтобы вернуть целое число. Эквивалентная функция С atoi()
. Однако это, похоже, не соответствует первой части вашего вопроса. Вы хотите преобразовать из целого числа в строку или из цепочки в целое число?
Ответ 6
Вы также можете проверить функцию atoi()
(ascii на integer) и ее родственники, atol
и atoll
и т.д.
Кроме того, есть и функции, которые делают обратное, а именно itoa()
и co.
Ответ 7
Возможно, вы захотите взглянуть на совместимое решение на этот сайт.
Ответ 8
Вы можете попробовать:
int intval;
String stringval;
//assign a value to intval here.
stringval = String(intval);
который должен сделать трюк.
Ответ 9
Это не оптимальное решение. Это мое решение, учитывая множественные ограничения, поэтому, если у вас ограниченные ресурсы, основанные на ваших инструкциях по курсу/инструктору, это может пригодиться вам.
Также обратите внимание, что это часть моего собственного проекта, и мне приходилось читать как в операндах, так и в цифрах, поэтому я использовал getchars. В противном случае, если вам нужны только целые числа и другие типы символов, мне нравится использовать это:
int k;
while (scanf("%d", &k) == 1)
Правила не были конкретными, "расширенными" понятиями C: нет строковых переменных, ни структур, ни указателей, ни методов, которые не были охвачены, и единственное, что мы разрешили, было #include
Таким образом, без простых вызовов метода, таких как atoi(), доступных или любых переменных String, я выбрал просто грубую силу.
1: читать символы в использовании getchar (fgets был запрещен). return 1 (статус выхода 1), если есть недопустимый символ. Для вашей проблемы, основанной на parseInt в Java 1 11 13 действителен, но 1 11 1a недействителен, поэтому для всех значений у нас есть допустимая строка, если все символы равны 0-9, игнорируя пробелы.
2: преобразуйте значение ASCII a char в его целочисленное значение (например, 48 = > 0)
3: используйте переменную val для хранения int, так что для каждого char в "подстроке" имеется соответствующая целочисленная цифра. то есть "1234" = > 1234, добавьте это в массив int и установите значение val равным 0 для повторного использования.
Следующий код демонстрирует этот алгоритм:
int main() {
int i, c;
int size = 0;
int arr[10]; //max number of ints yours may differ
int val = 0;
int chars[1200]; //arbitrary size to fit largest "String"
int len = 0;
//Part 1: read in valid integer chars from stdin
while((c = getchar()) != EOF && (c < 58 && c > 47)) {
chars[len] = c;
len++;
}
//Part 2: Convert atoi manually. concat digits of multi digit integers and
// append to an int[]
for(i = 0; i < len; i++){
for(i = 0; i < len; i++){
if(chars[i] > 47 && chars[i] < 58){
while((chars[i] > 47 && chars[i] < 58)){
if(chars[i] == 48)
c = 0;
if(chars[i] == 49)
c = 1;
if(chars[i] == 50)
c = 2;
if(chars[i] == 51)
c = 3;
if(chars[i] == 52)
c = 4;
if(chars[i] == 53)
c = 5;
if(chars[i] == 54)
c = 6;
if(chars[i] == 55)
c = 7;
if(chars[i] ==56)
c = 8;
if(chars[i] == 57)
c = 9;
val = val*10 + c;
i++;
}
arr[size] = val;
size++;
if(size > 10) //we have a check to ensure size stays in bounds
return 1;
val = 0;
}
//Print: We'll make it a clean, organized "toString" representation
printf("[");
for(i = 0; i < size-1; i++){
printf("%d, ", arr[i]);
}
printf("%d]", arr[i];
return 0;
Опять же, это метод грубой силы, но в таких случаях, как мой, где вы не можете использовать методы, которые люди используют профессионально или различные инструменты C99, это может быть то, что вы ищете.