我做了一个函数AppendLastSlashIfNotExist
。
今天,我决定制作另一个函数AppendLastBackSlashIfNotExist
wstring AppendLastSlashIfNotExist(__in const wstring& path)
{
if (path == L"/")
{
return path;
}
if (path.size() == 0 || path[path.size() - 1] != L'/')
{
return path + L"/";
}
return path;
}
wstring AppendLastBackSlashIfNotExist(__in const wstring& path)
{
if (path == L"\\")
{
return path;
}
if (path.size() == 0 || path[path.size() - 1] != L'\\')
{
return path + L"\\";
}
return path;
}
是的,很烂。更改仅斜线-> 反斜线。我想删除重复项。
wstring AppendLastSlashIfNotExist(__in const wstring& path, bool backSlash)
{
if (path == (backSlash ? L"\\" : L"/"))
{
return path;
}
if (path.size() == 0 || path[path.size() - 1] != (backSlash ? L'\\' : L'/'))
{
return path + (backSlash ? L"\\" : L"/");
}
return path;
}
我整合了它们。重复项已删除。但是另一个参数出现了。我仍然感到不舒服。
还没有其他方法可以消除重复吗?例如,使用按高阶函数。
任何想法,请。
最佳答案
不用传递 bool(boolean) 值来表示斜杠类型,您可以传递必需的斜杠字符,并且可能具有默认的斜杠字符:
wstring AppendLastSlashIfNotExist(__in const wstring& path,
wchar_t slash = L'\\')
{
// This is superfluous and is handled in next if condition.
/*if (1 == path.length() && path[0] == slash)
{
return path;
}*/
if (path.size() == 0 || path[path.size() - 1] != slash)
{
return path + slash;
}
return path;
}
std::wstring s(L"test");
std::wcout << AppendLastSlashIfNotExist(s) << "\n";
std::wcout << AppendLastSlashIfNotExist(s, L'/') << "\n";