Как игнорировать входной поток пробелов при перегрузке оператора >> - PullRequest
0 голосов
/ 01 ноября 2011

В настоящее время моя перегруженная operator>> функция принимает на вход [4: 1 2 3 4 ] и работает нормально. Но как я могу игнорировать любое количество пробелов, чтобы оно могло принимать [ 4 : 1 2 3 4 ], т.е. любое количество пробелов перед вводом?

istream& operator>>( istream & stream, my_vector & vector_a ) {
    string token2;

    int vec_size;
    vector<double> temp_vec;

    bool push = false;

    while (stream >> token2) {
        if (token2[0] == '[' && token2[2] ==':') {
            push = true;
        }

        if (token2 == "]") {
            break;
        }
        else if(!(token2[0] == '[' && token2[2] ==':')) {
            stream.setstate(ios::badbit);
        }

        if(push) {
            istringstream str(token2);
            double v;
            if (str >> v)
                temp_vec.push_back(v);
            vector_a.set_data(temp_vec);
        }
    }

    return stream;
}

Ответы [ 2 ]

4 голосов
/ 01 ноября 2011
stream >> std::ws;

Извлекает максимально возможное количество пробельных символов из текущей позиции во входной последовательности.Извлечение прекращается, как только обнаруживается непробельный символ.Эти извлеченные пробельные символы не сохраняются ни в одной переменной.

Обратите внимание, что при этом пропускаются пробелы, даже если флаг skipws ранее был unsetf в исходном потоке, поэтому вы должны сделать это в любом случае.

0 голосов
/ 01 ноября 2011

Думаю, что-то сделаю с этим заказом:

stream.setf(std::skipws);

char open_bracket, close_bracket, colon;

unsigned num_items, temp_item;

stream >> open_bracket;
stream >> num_items;
stream >> colon;

for (int i=0; i<num_items; i++) {
    stream >> temp_item;
    temp_vec.push_back(temp_item);
}

stream >> close_bracket;

if (open_bracket != '[' || close_bracket != ']' || colon != ':')
    stream.setstate(ios::failbit); 

Обратите внимание, что бит для установки неудачного преобразования - бит бит, а не бит. badbit предназначен для таких вещей, как неудачная попытка чтения с диска.

...