C ++ функция convertCtoD

0

Я новичок в C++. В рамках задания мы должны писать функции, но я не знаю, что означает учитель по тому, что он запрашивает. Кто-нибудь видел это или, по крайней мере, указал мне в правильном направлении. Я не хочу, чтобы вы писали эту функцию, я просто не знаю, какой результат или что он спрашивает. На самом деле я совершенно не знаю.

спасибо

convertCtoD( )

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

convertBtoD( )

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

  • 4
    Это означает, что вы передаете строку с нулевым символом в конце, такую как "1234" первой функции, и она возвращает число 1234 . И вы передаете "111" второму, и он возвращает 7 .
  • 0
    благодарю вас. Это очень помогает
Теги:

1 ответ

1

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

Я кратко упомянул о том, что "целое число, которое является базовым представлением 10 символов" бесполезно здесь, целое число будет представлять значение, тогда как "представление базы 10" представляет собой представление указанного значения.

Однако описанное описание просто означает, что вы берете строку (C-style) цифр и выставляете целое число. Итак, вы начнете с:

int convertCtoD(char *decimalString) {
    int retVal = 0
    // TBD: needs actual implementation.
    return retVal;
}

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

Это будет очень похоже:

int convertBtoD(char *binaryString) {
    int retVal = 0
    // TBD: needs actual implementation.
    return retVal;
}

Вы заметите, что я оставил возвращаемый тип как подписанный, даже если нет необходимости обрабатывать подписанные значения вообще. Вы увидите, почему в примере реализации, представленном ниже, я использую его для возврата условия ошибки. Причина, по которой я предоставляю код, даже если вы не просили об этом, заключается в том, что я думаю, что пять с лишним лет достаточно для того, чтобы вы не могли обмануть, передав мой код как свой :-)

Возможно, самый простой пример:

int convertCToD(char *decimalStr) {
    // Initialise accumulator to zero.

    int retVal = 0;

    // Process each character.

    while (*str != '\0') {
        // Check character for validity, add to accumulator (after
        // converting char to int) then go to next character.

        if ((*str < '0') || (*str > '9')) return -1;

        retVal *= 10;
        retVal += *str++ - '0';
    }

    return retVal;
}

Бинарная версия будет в основном идентичной, за исключением того, что она будет использовать '1' в качестве верхнего предела, а 2 как множитель (в отличие от '9' и " 10).

Это простейшая форма, но есть много возможностей для улучшения, чтобы сделать ваш код более надежным и читаемым:

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

Имея это в виду, возможно, что более надежное решение:

#include <stdbool.h>
#include <limits.h>

int convertBorCtoD(char *str, bool isBinary) {
    // Configure stuff that depends on binary/decimal choice.

    int maxDigit = isBinary ? '1' : '9';
    int multiplier = maxDigit - minDigit + 1;

    // Initialise accumulator to zero.

    int retVal = 0;

    // Optional check for empty string as error.

    if (*str == '\0') return -1;

    // Process each character.

    while (*str != '\0') {
        // Check character for validity.

        if ((*str < '0') || (*str > maxDigit)) return -1;

        // Add to accumulator, checking for overflow.

        if (INT_MAX / multiplier < retVal) return -1;
        retVal *= multiplier;
        if (INT_MAX - (*str - '0') < retVal) return -1;
        retVal += *str++ - '0';
    }

    return retVal;
}

int convertCtoD(char *str) { return convertBorCtoD(str, false); }
int convertBtoD(char *str) { return convertBorCtoD(str, true); }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню