我做了一个函数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";

07-28 01:02
查看更多