如何输入中间空格的整数

时间:2015-03-17 13:47:05

标签: c++ input integer

我必须输入整数并对它们进行操作。每个整数将由它们之间的空格分隔,并且未定义整数数,

因此输入可能是1 23 45 80或21 32。

我厌倦了使用cin,它没有用,因为它在太空中打破了。

1 个答案:

答案 0 :(得分:4)

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);
    }

让我们详细说明这个想法 -

  

什么是?非正式地,字符串是字符的集合,流是用于操纵移动数据的工具。

     

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

     

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

     

第二个代码如何工作?简单地说就是这样。到达&#39; &#39;你在string放了一整行。然后,您使用stringstream类来获取所需的值(此处为int x)。现在当你从它中提取时,你只是提取一个int值。之后,它再次进入getline以获取下一个数字。当空格分隔数字时,每个getline都会得到一个包含该数字的字符串。 getline的工作方式如下 - getline(cin,str,delim)   从cin中提取字符并将它们存储到str中,直到找到分隔字符delim(或换行符,&#39; \ n&#39;其中delim不在那里[表示getline(cin,str)]),

     

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

     

现在这是第二个代码的工作原理。查看参考手册以了解更多信息。

现在让我们看一下vector s。

  

vector是c ++中的容器类型。接下来的问题可能是 conatiner

     

容器:容器是存储其他对象集合的持有者对象。简而言之,您可以在此容器中保留任何内容,无论是您定义的int还是对象,还是结构类型,任何东西。这是灵活性使用模板。名称暗示的模板只是让我们对它的工作有所了解 - 是的,它是您可以用来代替它的任何类型的模板。

     

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