Regex_match用于给定字符串c ++

时间:2017-03-30 18:35:42

标签: c++

我正在尝试将字符串中的字符匹配到一组特定字符(“aeiou”)。

一旦匹配,我打算颠倒元音的顺序。

我为regex_match()的匹配函数收到错误。不确定我是否可以将一个字符作为regex_match的参数传递?

编辑:     错误:没有匹配函数来调用'regex_match(__ gnu_cxx :: __ alloc_traits> :: value_type&,std :: __ cxx11 :: regex&)'

这就是我的代码:

string reverseVowels(string s) {

    vector<int> v;
    std::regex r("[aeiou]");

    for (int i=0;i<s.length();j++)       //find all vowels and push back to vector
    {
        if (std::regex_match(s[i],r)))
        {
            v.push_back(i);
        }
    }

    for (int j=0;j<v.size()/2;j++)      //swap first and last element
    {
        char temp=s[v[j]];
        s[v[i]]=s[v[v.size()-1]];
        s[v[v.size()-1-j]]=temp;
    }
    return s;
}

2 个答案:

答案 0 :(得分:0)

正如评论中所述,regex_match不适用于char。如果您对字符串匹配您的正则表达式感兴趣,也可以匹配。您似乎对查找所有事件感兴趣,可以使用正则表达式迭代器来实现。这样的事情:

for (auto i = std::sregex_iterator(s.begin(), s.end(), r); i != std::sregex_iterator(); ++i) {
    v.push_back(i->position());
}

答案 1 :(得分:0)

regex_match() {{3}}中提到的第一个参数是一个字符串,您已经发送了一个字符串,否则可能会生成警告或错误,即使他们没有出现,你不能期望它正常工作。

#include <iostream>
#include <string>
#include <vector>
#include <regex>

std::string reverseVowels(std::string s) {

    std::vector<int> v;
    std::regex r("[aeiou]");

    for (uint i = 0; i < s.length(); i++) {

        std::string single = s.substr(i, 1);

        if (std::regex_match(single, r)) {

            v.push_back(i);

        }

    }

    for (uint j = 0; j < (v.size()/2); j++) {

        char ch = s[v[j]];

        s[v[j]] = s[v[v.size()-j-1]];
        s[v[v.size()-j-1]] = ch;

    }

    return s;
}

int main() {

    std::cout << reverseVowels("Mateus");

    return 0;
}