我正在尝试将字符串中的字符匹配到一组特定字符(“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;
}
答案 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;
}