[英]How to know the number of digits in an integer
我是编程新手,我想知道,我怎么知道用户输入的 integer 中的位数? 例如:用户输入了123456
这样的数字,我怎么知道用户输入了 6 位数字? 我不想使用for
循环来获取用户输入,因为我不希望用户在空格或enter之后输入每个数字。
现在,我正在将一个数字转换为一个数字数组,以便我可以控制它们,但问题是我不知道我应该循环多少个数字,因为我不知道有多少个数字在号码中。
我可以将用户的输入作为字符串获取,然后使用string.length
并将其转换为数字数组吗?
#include <iostream>
using namespace std;
int main()
{
int N;
cin >> N;
while(N--)
{
int num;
cin >> num;
int arr[1000];
for (int i=0 ;i<???;i++)
{
arr.[i]=num%10;
num = num /10;
}
}
}
一种更简单的方法是将其转换为字符串,然后计算所述字符串的长度
#include <iostream>
#include <string>
using namespace std;
int main() {
int n;
cin >> n;
string str = to_string(n);
cout <<"the length of" <<str << "is:" <<str.length() <<"\n";
}
输入 41 将打印出来。
41的长度是2
while (num != 0)
{
arr.[i]=num%10;
num = num /10;
}
是一种常见的模式,与您已有的模式很接近。
尽管您可以执行您在问题中提到的内容以及评论中建议的内容,并将输入作为字符串获取并使用string.length
。
是的,您可以将用户的输入读取为std::string
而不是int
,然后您可以使用std::string::size()
(或std::string::length()
)来获取字符串中的字符数,例如:
#include <iostream>
#include <string>
int main()
{
std::string S;
std::cin >> S;
int arr[1000] = {};
for (size_t i = 0; i < S.size(); ++i)
{
arr[i] = (S[i] - '0');
}
return 0;
}
或者:
#include <iostream>
#include <string>
#include <algorithm>
int main()
{
std::string S;
std::cin >> S;
int arr[1000] = {};
std::transform(S.begin(), S.end(), arr, [](char ch){ return int(ch - '0'); });
return 0;
}
无论哪种方式,如果需要,您可以使用std::stoi()
或std::strtol()
或其他类似 function 或将std::string
std::string
std::istringstream
然后从中读取 integer 。
否则,您可以将用户的输入读取为int
,然后将其转换为std::string
进行处理:
#include <iostream>
#include <string>
int main()
{
unsigned int N;
std::cin >> N;
std::string S = std::to_string(N);
int arr[1000] = {};
for (size_t i = 0; i < S.size(); ++i)
{
arr[i] = (S[i] - '0');
}
// or:
// std::transform(S.begin(), S.end(), arr, [](char ch){ return int(ch - '0'); });
return 0;
}
否则,如果你真的想读入一个int
并直接遍历它的数字,你可以使用更像这样的东西:
#include <iostream>
int main()
{
unsigned int N;
std::cin >> N;
int arr[1000] = {};
size_t i = 0;
while (N != 0)
{
arr[i++] = num % 10;
num /= 10;
}
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.