C++ 如何在C++;
我知道在堆栈溢出方面也有类似的问题。我已经检查过了。这里有两点:C++ 如何在C++;,c++,C++,我知道在堆栈溢出方面也有类似的问题。我已经检查过了。这里有两点: 这个数字是用户输入的,所以我不知道这个数字可能包含多少位数字 我不想直接打印数字,我需要对每个数字做进一步的处理,所以我需要一种保存或分配每个数字的方法。 例如,如果用户输入1027,我需要返回1,0,2,7,并且不打印。这就是我的问题开始的地方。 如果可以打印,我会这样写: intx; cin>>x; 而(x!=0) { cout这取决于您需要它的顺序。如果您需要从最低有效位(最右边)到最高有效位(最左边),那么您的解决方案
intx;
cin>>x;
而(x!=0)
{
cout这取决于您需要它的顺序。如果您需要从最低有效位(最右边)到最高有效位(最左边),那么您的解决方案就差不多了
intx=。。。
而(x!=0)
{
int current=x%10;//获取最右边的数字
x/=10;
//处理“当前”,或存储在容器中以供以后处理
}
如果需要从最重要(最左边)到最不重要(最右边),则可以递归执行此操作:
void表示每个数字(整数输入)
{
//递归基本情况
如果(输入==0){return;};
int电流=输入%10
对于每个数字(输入/10);//首先递归*然后处理
//处理“当前”,添加到容器等
}
// ...
INTX=。。。
对于每一个数字(x);
编辑:我显然错过了关于返回数字序列的部分
这两种方法都有效。如果从右向左,则需要先反转容器。如果使用递归,则需要将每个值附加到容器中。使用std::string
:
std::string input;
std::cin >> input;
现在input[i]
是i
-第位。input.size()
是位数。您可以使用vector。它可以进行可变长度的输入。您无需事先声明大小。在此处了解有关vector的更多信息:
#包括
#包括
#include//std::reverse
使用名称空间std;
内部主(空)
{
矢量数字;
int x;
cin>>x;
while(x)
{
数字。推回(x%10);
x=x/10;
}
//反转向量“数字”中元素的顺序,因为它们从最后一个收集到第一个,我们希望它们从第一个收集到最后一个。
反向(digits.begin(),digits.end());
//现在,向量“digits”包含给定数字的数字。您可以使用向量的索引访问向量的元素,就像访问数组元素一样。
对于(int i=0;istd::vector
存储未知数量的整数,如图所示:
#include <iostream>
#include <vector>
int main(void) {
std::vector<int> digits;
std::string s;
std::cout << "Enter the number: ";
std::cin >> s;
size_t len = s.length();
for (size_t i = 0; i < len; i++) {
digits.push_back(s[i] - '0');
}
// Comment next 3 code to stop getting output
for (size_t i = 0; i < len; i++)
std::cout << digits[i] << ' ';
std::cout << std::endl;
return 0;
}
#包括
#包括
内部主(空){
向量数字;
std::字符串s;
std::cout>s;
尺寸长度=s.长度();
对于(大小i=0;i std::cout所以您希望这些数字存储在某种容器中的某个地方。您熟悉容器吗?您希望存储每个数字(而数字的数量未知)?std::string s;std::cin>>s;
?(可能检查输入)@Beta是的,我想要存储它们。我不确定你说的容器是什么意思,我想做的是将它们存储在一个数组中,这听起来像是一种努力。I@RohanBari不,我还需要知道数字是多少。如果这是一个面试问题,这个答案不会通过面试。因此,这不是一个特别好的建议离子,因为它没有证明所需的算法知识,以得出一个好的结果solution@Human-那么我不想要这个job@Human-说真的,如果他们想让我展示我对算法的知识,他们应该告诉我。如果他们要求我提供一种从用户输入的数字中获取数字的方法,那么就是这样。有o顺便说一句,在问题中提到采访。无论如何,我很高兴在采访中发现我们没有匹配,而且不仅仅是后来,我的评论并不是为了煽动任何事情。@Human Compiler好吧,那很容易是从std::string
到std:vector
的转换。所以你可以在支持中演示osed访谈,您了解容器和算法;)。稍加编辑会使其更好。与其全局存储向量,不如将其放入主函数中,将可见性范围更改为本地。不要忘记定义(void)
,并显式返回0。@RohanBari(void)在C++中是不必要的和毫无意义的。此外,主()>代码>得到一个隐含的<代码>返回0;< /C> >尽管我更喜欢显式地写它。为什么你麻烦复制到一个新的原始字符数组中,然后读取它?<代码> STD::String < /Cord>有<代码> .No..(代码)> />代码>(因此适用于范围-for
)、运算符[]
、.data()
,等等。建议使用新的
,这是不好的。最终用户几乎不必编写新的
或删除
。此外,在这种情况下,这是完全不必要的。@下划线d您说得很对。答案已更新。
#include <iostream>
#include <vector>
int main(void) {
std::vector<int> digits;
std::string s;
std::cout << "Enter the number: ";
std::cin >> s;
size_t len = s.length();
for (size_t i = 0; i < len; i++) {
digits.push_back(s[i] - '0');
}
// Comment next 3 code to stop getting output
for (size_t i = 0; i < len; i++)
std::cout << digits[i] << ' ';
std::cout << std::endl;
return 0;
}