Я новичок в C++. В рамках задания мы должны писать функции, но я не знаю, что означает учитель по тому, что он запрашивает. Кто-нибудь видел это или, по крайней мере, указал мне в правильном направлении. Я не хочу, чтобы вы писали эту функцию, я просто не знаю, какой результат или что он спрашивает. На самом деле я совершенно не знаю.
спасибо
convertCtoD( )
Эта функция отправляется символьным массивом с нулевым завершением, где каждый символ представляет десятичную (базовую 10) цифру.
Функция возвращает целое число, которое представляет собой базовое 10 символов символов.
convertBtoD( )
Эта функция отправляется символьным массивом с нулевым завершением, где каждый символ представляет двоичную (базовую 2) цифру.
Функция возвращает целое число, которое является базовым 10 символом символа.
Эта функция отправляется символьным массивом с нулевым завершением, где каждый символ представляет десятичную (базовую 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); }
"1234"
первой функции, и она возвращает число1234
. И вы передаете"111"
второму, и он возвращает7
.