Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何输入中间有空格的整数_C++_Input_Integer - Fatal编程技术网

C++ 如何输入中间有空格的整数

C++ 如何输入中间有空格的整数,c++,input,integer,C++,Input,Integer,我必须输入整数并对每个整数进行运算。每个整数之间用空格分隔,整数的数量不定义 所以输入可能是1234580或2132 我厌倦了使用cin,它不起作用,因为在空间上它会断裂 int x; while(cin>>x) { store the number one by one } //process 简单地这样做。将数字存储在数组中。 或者你可以这样做- string s; getline(cin,s); std::stringstream myss; myss<<s;

我必须输入整数并对每个整数进行运算。每个整数之间用空格分隔,整数的数量不定义

所以输入可能是1234580或2132

我厌倦了使用cin,它不起作用,因为在空间上它会断裂

int x;
while(cin>>x)
{
  store the number one by one
}
//process
简单地这样做。将数字存储在数组中。 或者你可以这样做-

string s;
getline(cin,s);
std::stringstream myss;
myss<<s;
std::string t;
int x;
std::vector<int> v;
while(std::getline(myss,t,' '))
{
    if(std::stringstream(t)>>x)
    {
       // store x in an vector. 
       v.push_back(x);
    }
字符串s;
getline(cin,s),;
std::stringstream myss;
myssx)
{
//将x存储在向量中。
v、 推回(x);
}
让我们详细说明一下这个想法-

什么是流?非正式地说,字符串是字符的集合,流是处理移动数据的工具

什么是stringstream?对字符串进行操作的类。该类的对象使用包含字符序列的字符串缓冲区。可以使用member
str
作为
string
对象直接访问此字符序列

第一个代码是如何工作的
cin
是类
istream
的对象,表示标准输入流。(从其中获取输入)它返回对在此处重载的同一流的引用
istream
cin
用于格式化字符串提取。可以进行如下测试 如果(cin) //然后做点什么。 如果
cin
正常,则为
true
;如果文件结束或遇到错误,则为
false
。它可以很容易地用于从文件中读取的情况

第二个代码是如何工作的?简单地说就是这样。直到“”为止,您正在将整行放入
字符串中。然后使用
stringstream
类来获得所需的值(这里是int x)。现在,当您从中提取时,您只提取一个int值。之后,它再次转到getline获取下一个数字。当空格分隔数字时,每个getline都会得到一个包含该数字的字符串。getline的工作原理如下-getline(cin、str、delim) 从cin中提取字符并将其存储到str中,直到找到定界字符delim(或换行字符“\n”,其中delim不存在[表示
getline(cin,str)
])

如果在is中到达文件末尾或在输入操作期间发生其他错误,提取也会停止。 如果找到分隔符,将提取并丢弃该分隔符,即不存储该分隔符,然后将开始下一个输入操作。 每个提取的字符都会附加到字符串中

这就是第二个代码的工作原理。查看参考手册了解更多细节

现在让我们看一点关于向量的内容

向量是C++中的容器类型。下一个问题可能是什么是conatiner

容器:容器是存储其他对象集合的持有者对象。简单地说,您可以在这个容器中保存任何东西,无论是int还是您定义的对象或结构类型,任何东西。这是使用模板实现的灵活性。顾名思义,模板只是让我们了解一下它的工作。是的,它是任何类型的模板,你都可以用它来代替它

vector:还有其他容器,如list、deque等,但vector与其他容器大不相同。Vector非常有效,它必须从末端(后端)插入或删除元素,并随机访问元素-Vector提供了类似
v[i]
等的随机访问。这是Vector的基础。它比数组好,因为它在推送元素时会动态增加。要知道如何使用它,请查阅参考手册


你能告诉我们你试过什么吗?然后我们可以明确地讨论为什么它不起作用。因为这个原因,我做不到。我在一次考试中遇到了这样的问题。我无法接受输入。它是在线的,输入是这样的。2132586580或2132。。。它可以改变我不能在数组中使用的数字的数量。因为我不知道cin必须重复多长时间,以及我不知道的数字的数量。同时,我们能做什么(cin>>x)??它什么时候停止执行。它什么时候会存储值,存储在哪里?@SebuElias.:看看我现在的答案。我已经包括了一个修改过的答案。你能解释一下吗。我不懂密码。向量和字符串流我不熟悉。@SebuElias.:我将在回答中详细说明。你查过密码了吗?希望你没有问题。