2013-09-04 4 views
1

Как разделять строку в пространстве и возвращать первый элемент? Например, в Python вы могли бы сделать:Разделить строку в пространстве и вернуть первый элемент в C++

string = 'hello how are you today' 
ret = string.split(' ')[0] 
print(ret) 
'hello' 

Делать это в C++, я предположил бы, что я должен был бы разделить строку первым. Глядя на это в Интернете, я видел несколько длинных методов, но что было бы лучшим, которое работает как код выше? Пример для C++ расколоть, что я нашел

#include <boost/regex.hpp> 
#include <boost/algorithm/string/regex.hpp> 
#include <iostream> 
#include <string> 
#include <vector> 

using namespace std; 
using namespace boost; 

void print(vector <string> & v) 
{ 
    for (size_t n = 0; n < v.size(); n++) 
    cout << "\"" << v[ n ] << "\"\n"; 
    cout << endl; 
} 

int main() 
{ 
    string s = "one->two->thirty-four"; 
    vector <string> fields; 

    split_regex(fields, s, regex("->")); 
    print(fields); 

    return 0; 
} 
+0

вы встречаете [это] (http://stackoverflow.com/questions/236129/ ли расщепление-а-нить в-с? RQ = 1)? Я не могу сказать, как это иначе. – chris

+0

oh и получение разделения для возврата в качестве списка является оптимальным. из того, что я видел, этот код C++ возвращает его как «один» «два» «тридцать четыре» – riyoken

+0

, вероятно, запускают это через что-то вроде цикла for. – riyoken

ответ

4

Зачем с расщеплением всей строки и делать копии каждые маркеров по пути, так как вы будете бросать их в конце (потому что вам нужно только первый маркер) ?

В вашем конкретном случае очень просто использовать std::string::find():

std::string s = "one two three"; 
auto first_token = s.substr(0, s.find(' ')); 

Обратите внимание, что если нет пространства символ не найден, ваш маркер будет вся строка.

(и, конечно же, в C++ 03 заменить auto с соответствующим именем типа, то есть. std::string)

+1

Он возвращает индекс. Вы можете сделать 'auto first_token = s.substr (0, s.find (''));' – chris

+0

@chris О, мой, я догадываюсь, что я запутался с каким-то другим алгоритмом поиска в стандартной библиотеке. Виноват. – syam

+1

Да, 'std :: find' возвращает итератор. – chris

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