2016-02-02 3 views
0

Так что я пытался что-то из CIN чтения и пространств вырезать их, Например, если я получилCIN проблема с пространством

AA 3 4 5 
111 222 33 

от CIN, я хочу, чтобы хранить их в виде массива строк. Мой код до сих пор

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

, но тогда программа разбился. Затем я добавил соиЬ для попытались выяснить, что в темпе, и это показывает:

AA345 

Так как я могу сохранить введенный в массив с пробелами режущих их?

+0

Возможный дубликат [CIN cin ввода с пробелами?] (Http://stackoverflow.com/questions/5838711/c-cin-input-with-spaces) –

+0

@SviatoslavYakymiv, это на самом деле полная противоположность предлагаемого дубликата , – SergeyA

+0

@SviatoslavYakymiv eh нет, я хочу сказать, что хочу хранить каждое слово в массиве, с разбивкой пробелов. Итак, в этом примере я хочу хранить AA в массиве [0] и хранить 3 в массиве [1], 4 в массиве [2] и т. Д. – GzAndy

ответ

1

Вот одна возможность лечения вход с cin с произвольным числом пробелов между записями, а также для хранения данных в векторе с помощью библиотеки наддува:

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

редактировать

Тот же результат может быть получен без использования экспериментальной библиотеки ускорения, например, следующим образом:

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

пример

Вход:

AA 12 6789  K7 

Выход:

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

Надеется, что это помогает.

+0

Есть ли другие способы сделать это без включения boost? – GzAndy

+0

Конечно, есть. Мне просто нравится использовать boost ;-) – RHertel

+0

В этом случае повышение не допускается :(можете ли вы дать другое решение plz? – GzAndy

 Смежные вопросы

  • Нет связанных вопросов^_^