cin issue with space

对着背影说爱祢 提交于 2020-01-06 19:55:49

问题


So I was trying to read something from cin and spaces cut them, For example, if I got

AA 3 4 5
111 222 33

from cin, I want to store them in a string array. My code so far is

string temp;
int x = 0;
string array[256];
while(!cin.eof())
{
    cin >> temp;
    array[x] = temp;
    x += 1;
}

but then the program crashed. Then I added cout to tried figure out what is in temp and it shows:

AA345

So how can I store the input into an array with spaces cutting them?


回答1:


Here's one possibility to treat an input from cin with an arbitrary number of whitespaces between the entries, and to store the data in a vector by using the boost library:

#include <iostream>
#include <string>
#include <vector>
#include <boost/algorithm/string.hpp>
int main() {
  std::string temp;
  std::vector<std::string> entries;
  while(std::getline(std::cin,temp)) {  
      boost::split(entries, temp, boost::is_any_of(" "), boost::token_compress_on);
      std::cout << "number of entries: " << entries.size() << std::endl;
      for (int i = 0; i < entries.size(); ++i) 
        std::cout << "entry number " << i <<" is "<< entries[i] << std::endl;                  
    }  
  return 0;
}

edit

The same result could be obtained without using the awesome boost library, e.g., in the following way:

#include <iostream>
#include <string>
#include <vector>
#include <sstream>
int main() {
  std::string temp;
  std::vector<std::string> entries;
  while(std::getline(std::cin,temp)) {    
      std::istringstream iss(temp);
      while(!iss.eof()){ 
        iss >> temp;
        entries.push_back(temp);    
      }
      std::cout << "number of entries: " << entries.size() << std::endl;
      for (int i = 0; i < entries.size(); ++i)  
        std::cout<< "entry number " << i <<" is "<< entries[i] << std::endl;
      entries.erase(entries.begin(),entries.end()); 
    }
  return 0;
}

example

Input:

AA 12  6789     K7

Output:

number of entries: 4
entry number 0 is AA
entry number 1 is 12
entry number 2 is 6789
entry number 3 is K7

Hope this helps.



来源:https://stackoverflow.com/questions/35164296/cin-issue-with-space

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!