gpt4 book ai didi

c++ - char 和 wchar_t 的模板没有给出匹配的成员

转载 作者:行者123 更新时间:2023-11-30 20:14:38 25 4
gpt4 key购买 nike

我尝试了这两个函数来处理 char 和 wchar_t

C++ count matches regex function that works with both char and wchar_t? C++ regex with char and wchar_t?

对于我的 char* 来说,它工作得很好,但是当使用 wchar_t* 时,它给出了一个不匹配的成员函数调用。我不明白为什么...

class myClass
{
int occurrence = 0;
string new_String;

public:


template<typename CharType>
void replaceSubstring(const CharType* find, const CharType* str, const CharType* rep) {
basic_string<CharType> text(str);
basic_regex<CharType> reg(find);

new_String = regex_replace(text, reg, rep);



}

template<typename CharT>
void countMatches(const CharT* find, const CharT* str)
{
basic_string<CharT> text(str);
basic_regex<CharT> reg(find);
typedef typename basic_string<CharT>::iterator iter_t;
occurrence = distance(regex_iterator<iter_t>(text.begin(), text.end(), reg),
regex_iterator<iter_t>());
}


void display()
{
cout << "occurrence " << occurrence << " new string " << new_String << endl;
}

};



int main()
{

const char *str1 = "NoPE NOPE noPE NoPE NoPE";
const wchar_t *str2 = L"NoPE NOPE noPE NoPE NoPE";

myClass test;


test.countMatches("Ni",str1);
test.replaceSubstring("No",str1,"NO");
test.display();

test.countMatches("Ni",str2);
test.replaceSubstring("No",str2,"No");
test.display();




return 0;
}

最佳答案

replaceSubstring() ,您正在分配 regex_replace 的结果与 basic_regex<ChartType>进入std::string 。当CharType时此操作失败不是char ,从那时起std::string没有这样的赋值运算符。

此外,您只需使用宽字符字符串调用宽字符版本,因为它的参数具有相同的类型。所以:

test.countMatches(L"Ni",str2);
test.replaceSubstring(L"No",str2,L"No");
test.display();

关于c++ - char 和 wchar_t 的模板没有给出匹配的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25662635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com