Как получить int от char в C - PullRequest
       43

Как получить int от char в C

0 голосов
/ 15 апреля 2019

(я француз, извините за мой плохой английский)

Я не знаю, как получить int от символа [], паттерн символа будет всегда одинаковым: "prendre2 "," prendre 44 "," prendre 710 "...

Я хочу проверить правильность шаблона предложения и получить целое число.

Я попытался сделать это, но, как вы видите, проблема в том, что я просто могу проверить, находится ли целое число между 0-9, потому что я проверяю только один символ.

[...]

else if (est_prendre(commande)){
    /* if  the output is 1*/
    int number = commande[8]- '0'
}
int est_prendre(char *commande){
    int i;
    char temp[9] = "";
    char c = commande[8];
    int num = c - '0';
    for (i=0; i<8; i++){
        temp[i] = commande[i];
    }
    if (strcmp ("prendre ", temp) == 0)
    {
        if ( /*  num IS INTEGER?  */)
        {
            return 1;
        }
        else
        {
            return 0;
        }
    } else {
        return 0;
    }

}

Я ожидаю, что если commande = "prendre 3", вывод est_prendre равен 1, потому что шаблон правильный И после того, как поставить целое число в число переменной.

Спасибо!

Ответы [ 2 ]

1 голос
/ 15 апреля 2019

Предполагая, что 'commande + 8' является допустимой подстрокой, вам нужна функция atoi () (от ASCII до Integer). Эта функция широко документирована, и вы можете легко найти в Интернете ее использование.

int number = atoi(commande+8);

Просто помните, что подстрока заканчивается первым нецифровым символом:

  • atoi ("23") возвращает 23
  • atoi ("51hh37") возвращает 51
  • atoi ("z3456") возвращает 0

Примечание: atoi преобразует входную строку в целое число, и вы можете использовать ее, если уверены, что она соответствует ожидаемому вводу. Поэтому, если вы ожидаете, что в вашей строке будут длинные целые числа или значения с плавающей точкой, вы можете использовать atol () (ASCII to long) или atof () (ASCII to float).

1 голос
/ 15 апреля 2019

Это очень просто, вы должны (пере) прочитать любой справочник / учебник по Си, который вы использовали для изучения языка.

Вы должны просто использовать стандарт sscanf()Функция:

int value;
if (sscanf(commande, "prendre %d", &value) == 1)
{
  ... it was a match, the variable 'value' will be set to the number from the string
}

Вы можете удалить (странно выглядящий) код, который копирует символы из commande в temp, и, конечно же, переменную temp.Просто проверьте строку commande напрямую.

...