用于搜索字符串模式的c ++中的正则表达式

时间:2017-06-21 12:50:54

标签: c++ c++11

我有一个这样的字符串:

string s ="one 1 two 2 three 3";

我想写一个正则表达式,这样当用户输入"一个"我打印1,如果输入为"两个" ...任何建议或帮助将非常感谢。

2 个答案:

答案 0 :(得分:3)

抛弃注册表。写一些代码。使用

形式的东西
int main()
{
    std::map<std::string, int> m = {{"one", 1}, {"two", 2}, {"three", 3}};
    std::string input;
    std::cin >> input
    std::cout << m[input];
}

注意花哨的初始化:从C ++ 11开始有效。

答案 1 :(得分:3)

非常简单:

std::string s = "one 1 two 2 three 3";

std::regex rx( "([a-z]+) (\\d+)" );
std::match_results< std::string::const_iterator > mr;

std::regex_search( s, mr, rx );
std::cout << mr.str( 1 ) << '\n';  // one
std::cout << mr.str( 2 ) << '\n';  // 1  

以及整场比赛:

std::string temp = s;
while( std::regex_search( temp, mr, rx ) ){
    std::cout << mr.str( 1 ) << '\n';
    std::cout << mr.str( 2 ) << '\n';
    temp = mr.suffix().str();
}  

输出:

one
1
two
2
three
3

并最终:

std::string ui; //user_input

std::string temp = s;
while( std::regex_search( temp, mr, rx ) ){

    std::getline( std::cin, ui );

    if( ui == mr.str( 1 ) ){
       std::cout << mr.str( 2 ) << '\n';
    }

    temp = mr.suffix().str();
}  

注意:这不是一个完美的解决方案,因为regex_search逐个匹配项目。因此,您应该输入one然后two然后three

测试

 ideas $  ./temp 
one
1
two
2
three
3
 ideas $  

可以随心所欲,但我只是为了学习它是如何工作的而写的:

std::string s = "one 1 two 2 three 3";

std::string ui; //user_input
std::getline( std::cin, ui );

std::string pt = "(" + ui + ")" + " ";
std::regex rx( pt + "(\\d)" );
std::match_results< std::string::const_iterator > mr;

std::regex_search( s, mr, rx );
if( ui == mr.str( 1 ) ){
   std::cout << mr.str( 2 ) << '\n';
}   

测试

 ideas $  ./temp
one
1
 ideas $  ./temp
two
2
 ideas $  ./temp
three
3
 ideas $