如何使一个函数同时适用于字符串和 wstring?
How can I make a function work for both string and wstring?
如果我想要像下面这样的函数在 basic_string<char>
和 basic_string<wchar>
上工作,我应该怎么做?
请注意,它必须在无序映射中更改wchar_t
。
该函数还需要接受 wchar_t
数组以支持将参数作为文字传递。
bool isUnique(wstring s)
{
if (s.size() <= 1)
{
return true;
}
unordered_map<wchar_t, bool> charSeen;
for (int i = 0; i < s.size(); i++)
{
if (!charSeen[s[i]])
{
charSeen[s[i]] = true;
}
else
{
return false;
}
}
return true;
}
int main(int argc, char *argv[]) {
cout << isUnique(L"فعه");
return 0;
}
让一个辅助函数接受一个字符指针并委托给主函数传递一个 std::basic_string
:
template<class charT>
bool isUnique(charT const* p)
{
return isUnique(std::basic_string<charT>(p));
}
然后更改您的主要 isUnique
函数以采用 std::basic_string
模板化其字符类型:
template <typename charT>
bool isUnique(std::basic_string<charT>);
如果我想要像下面这样的函数在 basic_string<char>
和 basic_string<wchar>
上工作,我应该怎么做?
请注意,它必须在无序映射中更改wchar_t
。
该函数还需要接受 wchar_t
数组以支持将参数作为文字传递。
bool isUnique(wstring s)
{
if (s.size() <= 1)
{
return true;
}
unordered_map<wchar_t, bool> charSeen;
for (int i = 0; i < s.size(); i++)
{
if (!charSeen[s[i]])
{
charSeen[s[i]] = true;
}
else
{
return false;
}
}
return true;
}
int main(int argc, char *argv[]) {
cout << isUnique(L"فعه");
return 0;
}
让一个辅助函数接受一个字符指针并委托给主函数传递一个 std::basic_string
:
template<class charT>
bool isUnique(charT const* p)
{
return isUnique(std::basic_string<charT>(p));
}
然后更改您的主要 isUnique
函数以采用 std::basic_string
模板化其字符类型:
template <typename charT>
bool isUnique(std::basic_string<charT>);