0
votes

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
@SviatoslavYakymiv, that is actually the exact opposite of suggested duplicate. - SergeyA
@SviatoslavYakymiv eh no, I mean I want to store every word in an array,with spaces cutting them. So in the example, I want to store AA in array[0], and store 3 in array[1], 4 in array[2] etc. - GzAndy
You need to provide the whole code, and indicate exactly where it crashed. There is nothing in the provided code which would cause an aplication to crash, unless you have more than 256 tokens, which is unlikely. - SergeyA
@GzAndy, you still need to provide the code. I have no idea how you are printing your stuff. - SergeyA

1 Answers

1
votes

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.