2013-05-05 5 views
1

Я довольно новичок в кодировании, и я надеялся, что кто-то сможет мне помочь? Я пытаюсь читать строки с разделителями пробелов и анализировать их в (в конечном счете, в связанном списке) вектор.Разделите строку на int

так что у меня есть вектор ints, есть итераторы для вектора STL, но как я могу перебирать узлы в списке ссылок не в STL?

#include <cstdlib> 
#include <iostream> 
#include <string> 
#include <sstream> 
#include <vector> 

using namespace std; 

int main(int argc, char** argv) {  
    cout << "Enter some integers, space delimited:\n"; 
    string someString; 
    getline(cin, someString); 

    istringstream stringStream(someString); 
    vector<string> parsedString; 
    char splitToken = ' '; 

    //read throguh the stream 
    while(!stringstream.eof()){ 
     string subString; 
     getline(stringStream, subString, splitToken); 
     if(subString != ""){ 
     parsedString.push_back(subString); 
     } 
    } 

    return EXIT_SUCCESS; 
} 
+0

Напоминайте себе об этом позже: 'станд :: istream_iterator первый (stringStream), в прошлом; std :: vector parsedString (первый, последний); 'для разделения строки на контейнер (хотя я не думаю, что это именно то, что вы действительно пытались сделать). Есть также другие способы в популярном вопросе на этом сайте. – chris

+0

Почему не просто 'int a; while (cin >> a) {// сделать что-то} ' – gongzhitaao

+0

вы хотите реализовать связанный список самостоятельно? – gongzhitaao

ответ

0

stringstream может автоматически обрабатывать разделители, как это:

cout << "Enter some integers, space delimited:\n"; 
string someString; 
getline(cin, someString); 

istringstream stringStream(someString); 
vector<int> integers; 
int n; 
while (stringStream >> n) 
    integers.push_back(n); 
+0

мне все равно не нужно использовать getline для ввода ввода клавиатуры в someString? – StillLearningToCode

+0

@MichaelMenard Да - я отредактирую, чтобы сделать его более ясным – nullptr

+0

ok, так что теперь у меня есть вектор, я знаю, как сделать итератор для STL-вектора, но если я напишу связанный класс списка, STL-итератор для этого (и я не могу написать один правильный?). как бы вы предложили мне пройти через связанный список? У меня есть указатель, определенный для головы и тока. – StillLearningToCode

1

Поскольку это пространство разделитель, почему бы не просто:

#include <iostream> 
using namespace std; 

int main() { 
    int a; 
    vector<int> v; 
    while (cin >> a) { 
     v.push_back(a); 
    } 

    for (int i = 0; i < v.size(); ++i) { 
     int b = v[i]; 
    } 

    return 0; 
} 

И КСТАТИ, ctrl-D или нецелый вход, как char, завершит этот while.

+0

Хотя этот пример работает, его исходный код взял строку целых чисел, а затем обработал их , Это будет продолжаться до тех пор, пока 'cin' перестанет давать целые числа – nullptr

+0

lol, вы, ребята, выглядите так просто. я пытался получить просто простой cin для работы ... – StillLearningToCode

+0

@MichaelMenard См. обновленный. В большинстве случаев вы можете рассматривать его как массив. И, конечно же, вы можете использовать 'iterator'. – gongzhitaao