Подтвердить что ты не робот

Разбор целых чисел в String C

Как разобрать целое число до string(char* || char[]) в C? Существует ли эквивалент метода Integer.parseInt(String) из Java в C?

4b9b3361

Ответ 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, это может быть то, что вы ищете.