gpt4 book ai didi

C++ 函数 convertCtoD

转载 作者:行者123 更新时间:2023-11-28 07:19:40 27 4
gpt4 key购买 nike

我是 C++ 新手。作为作业的一部分,我们必须写函数,但我不知道老师的要求是什么意思。有没有人看到这个或者至少指出我正确的方向。我不想让你写函数,我只是不知道输出是什么或者他在问什么。我现在真的一无所知。

谢谢

convertCtoD( )

这个函数被发送一个空终止字符数组其中每个字符代表一个十进制(以 10 为基数)数字。
该函数返回一个整数,它是字符的基数 10 表示。

convertBtoD( )

这个函数被发送一个空终止字符数组其中每个字符代表一个二进制(基数 2)数字。
该函数返回一个整数,该整数是以 10 为底的字符表示形式。

最佳答案

This function is sent a null terminated character array where each character represents a Decimal (base 10) digit. The function returns an integer which is the base 10 representation of the characters.

我将简要提及一个事实,即“以 10 为基数表示字符的整数”在这里没有用,整数将表示 而“以 10 为基数表示”是 < em>表示所述值。

但是,给出的描述只是意味着您输入一个(C 风格的)数字串并输出一个整数。所以你会开始:

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

This function is sent a null terminated character array where each character represents a Binary (base 2) digit. The function returns an integer which is the base 10 representation of the character.

这将非常相似:

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)。

这是最简单的形式,但还有很多范围可以改进以使您的代码更健壮和可读:

  • 由于这两个函数非常相似,您可以重构公共(public)位以减少重复。
  • 可能想将空字符串视为无效字符串,而不是像当前那样只返回零。
  • 可能希望将溢出检测为错误。

考虑到这些,以下可能是更可靠的解决方案:

#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); }

关于C++ 函数 convertCtoD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19690506/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com