0

我正在尝试从用户输入一个数字(如12345)并将其转换为 int。我正在使用的代码是:

int convertToNumber(char a[10]) {
    int output = 0;
    int b;
    int intArray[10];
    //Finds length
    for (int i = 0; a[i]!=0; i++) {
        if (a[i]==0) {
            b=i-1;
        }
    }
    //Runs through every letter.
    for (int i = 0; a[i]!=0; i++) {
        //Checks if user inputted anything but letter
        intArray[i] = a[i] - '0';
        //Multiplying it by the distance from the end
        intArray[i]= intArray[i] * (10^(b-i));
        //Adds to output
        output=+intArray[i];

    }
    return output;
}

但是,这最终不会像我希望的那样。有谁知道怎么了?

4

3 回答 3

3

您需要介绍 C++ 中的运算符。10^(b-i)不是 10(b-i)次方,而是 10 XOR b-i。另外,为了找到长度,不要滚动你自己的函数,使用std::strlen().

但是无论如何您都不需要明确的长度:随着字符串的进行累积产品。

int my_str2int(const char *s)
{
    int res = 0;
    while (*s) {
        res *= 10;
        res += *s++ - '0';
    }

    return res;
}

另外,我刚刚注意到标题:

我正在尝试输入用户的数字(如 12345)并将其转换为 int

如果这就是你想要的:

long l = std::strtol("12345", NULL, 0);
unsigned long ul = std::strtoul("12345", NULL, 0);
long long ll = std::strtoll("12345", NULL, 0);
unsigned long long ull = std::strtoull("12345", NULL, 0);
int i = std::atoi("12345");

通常,文档并不邪恶

于 2013-07-04T22:29:26.530 回答
0

您可以尝试避免在这里重新发明轮子。查找strtoulstrtoull查看它们是否在您的系统上可用。它们也处理不同基数的数字,如果您的字符串包含数字和非数字的混合,它们会给您一个指向第一个非数字的指针。

而且,正如其他人指出的那样,^执行按位异或。

于 2013-07-04T22:31:46.440 回答
0

您想使用数学库中的 pow 函数。^ 做异或。

于 2013-07-04T22:32:36.700 回答