扩展c ++字符串成员函数

Mik*_*e D 9 c++ string

我需要做一个不区分大小写的查找,并找到以下代码来完成这个技巧

bool ci_equal(char ch1, char ch2)
{
    return toupper((unsigned char)ch1) == toupper((unsigned char)ch2);
}

size_t ci_find(const string& str1, const string& str2)
{
    string::const_iterator pos = std::search(str1. begin ( ), str1. end ( ), str2.
    begin ( ), str2. end ( ), ci_equal);
    if (pos == str1. end ( ))
        return string::npos;
    else
        return pos - str1. begin ( );
}
Run Code Online (Sandbox Code Playgroud)

这让我想知道如何使它成为'string'的成员函数,所以可以像这样调用它:

string S="abcdefghijklmnopqrstuv";
string F="GHI";

S.ci_find(F);
Run Code Online (Sandbox Code Playgroud)

我意识到非英语语言中的案例转换存在许多问题,但这不是我感兴趣的问题.

作为一个新手,我很快就迷失在容器和模板中.

反正有没有这样做?有人能给我一个类似的例子吗?

Jer*_*fin 10

我认为大多数经验丰富的C++程序员都会认为这是个糟糕的主意.如果有的话,std::string已经有太多的成员函数,并且添加更多将使情况变得更糟.更糟糕的是,如果你打算这样做,你可能会通过继承来实现 - 但std::string不是设计用作基类,而将其用作一个会导致代码脆弱且容易出错.

关于如何做到这一点的另一个想法,你可能想要阅读本周#29的大师.请阅读整篇文章,了解如何做到这一点,以及为什么你可能不想这样做.最终,你现在所拥有的可能是最好的选择 - 保持不区分大小写的搜索与std::string自身分离.


Tom*_*Tom 8

std::string 是不是要扩展.

您可以将std :: string封装到您的类中,并在该类中设置这些成员函数.


Jus*_*Boo 6

也许遵循标准库算法<algorithm>方法可能是有益的.它不会让用户感到惊讶.:-)

算法函数作为示例.