Split the string on dot and retrieve each values from it in C++
我需要在EDCOX1的0中分离字符串。
下面是我的绳子-
现在我需要在上面的字符串上拆分
下面是我从这里读到的代码-
1 2 3 4 5 6 7 8 | void splitString() { string sentence ="@event.hello.dc1"; istringstream iss(sentence); copy(istream_iterator<string>(iss), istream_iterator<string>(), ostream_iterator<string>(cout," ")); } |
但我不知道如何用上述方法对
1 2 3 | split1 = @event split2 = hello split3 = dc1 |
谢谢你的帮助。
您可以使用
1 2 3 4 5 6 7 8 | string sentence ="@event.hello.dc1"; istringstream iss(sentence); std::vector<std::string> tokens; std::string token; while (std::getline(iss, token, '.')) { if (!token.empty()) tokens.push_back(token); } |
结果是:
1 2 3 | tokens[0] =="@event" tokens[1] =="hello" tokens[2] =="dc1" |
创建一个ctype方面,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include <locale> #include <vector> struct dot_reader: std::ctype<char> { dot_reader(): std::ctype<char>(get_table()) {} static std::ctype_base::mask const* get_table() { static std::vector<std::ctype_base::mask> rc(table_size, std::ctype_base::mask()); rc['.'] = std::ctype_base::space; rc[' '] = std::ctype_base::space; // probably still want as a separator? return &rc[0]; } }; |
然后在流中嵌入一个实例,并读取字符串:
1 2 3 4 5 6 7 8 | istringstream iss(sentence); iss.imbue(locale(locale(), new dot_reader())); // Added this copy(istream_iterator<string>(iss), istream_iterator<string>(), ostream_iterator<string>(cout," ")); |
首先,您可以更改被认为是流空间的内容。方法是在新的
1 2 3 4 | std::string first_component(std::string const& value) { std::string::size_type pos = value.find('.'); return pos == value.npos? value: value.substr(0, pos); } |
您可以使用strtok函数:http://en.cppreference.com/w/cpp/string/byte/strtok您可以通过这样的操作来使用:
1 | strtok(sentence.c_str(),"."); |