2017-03-17 2 views
1
#include <iostream> 
#include <regex> 
#include <sstream> 
#include <vector> 

std::vector<std::string> split(const std::string &str) { 
    std::regex rgx(""); //what goes here?? 
    std::smatch base_match; 
    std::regex_search(str, base_match, rgx); 
    return {base_match.begin(), base_match.end()}; 
} 

std::ostream &operator<<(std::ostream &os, 
         const std::vector<std::string> &strs) { 
    for (const auto &str : strs) { 
    os << "-> " << str << "\n"; 
    } 
    return os; 
} 

int main(int argv, char **argc) { 
    std::cout << split("asdasd,dasdasd,adadada"); 
    return 0; 
} 

を使用して、カンマ区切りのリストをトークン化、私は(sregex_token_iteratorを使用せずに、またはブースト)正規表現のソリューションを持っていると思いますあまりにも)。STD正規表現に

expected output: 
asdasd 
dasdasd 
adadada 
+0

はなぜ? 'str.find( '、')'と 'str.substr'の繰り返し適用に関して何が問題になっていますか? – Chowlett

+0

だからスペースで区切られたリストやカンマで区切られたリスト、またはスペースとカンマで区切られたリストの組み合わせで読み込まれる正規表現が必要なのでしょうか? – NathanOliver

+0

@ NathanOliver私はそれが{a、b、c、d}のようなものを扱うようにしたい – mkmostafa

答えて

1

だから、ホワイトスペースの任意の量(*)(\s)に囲まれ、カンマ(,)にマッチする正規表現をしたいですか?

それは自明構築しています:\s*,\s*

https://stackoverflow.com/tags/regex/info