将多位数字符号转换为int

时间:2013-07-04 22:26:05

标签: c++

我正在尝试从用户输入一个数字(如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;
}
但是,这并不像我希望的那样。谁知道什么是错的?

3 个答案:

答案 0 :(得分:3)

您需要在C ++中介绍运算符。 10^(b-i)不是(b-i)幂的10,而是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");

通常,the docs ain't evil

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

您想在数学库中使用pow函数。 ^做xor。