我正在尝试从用户输入一个数字(如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;
}
但是,这并不像我希望的那样。谁知道什么是错的?
答案 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");
答案 1 :(得分:0)
您可以尝试避免在这里重新发明轮子。查看strtoul
和strtoull
,查看它们是否在您的系统上可用。这些句柄也处理不同的数字,如果你的字符串包含数字和非数字的混合,它会给你指向第一个非数字的指针。
而且,正如其他人所指出的那样,^
执行按位异或。
答案 2 :(得分:0)
您想在数学库中使用pow函数。 ^做xor。