c++的strip、lstrip、rstrip簡單實現

string strip(const string &s, const string &chars = "")
{
    if (s.empty())
        return s; 
    
    string s1 = s;
    if (chars.empty()) //默認爲空字符
    {
        string::iterator siter = s1.begin();  
        while (siter != s1.end())
        {
            if (isspace(*siter))
                siter = s1.erase(siter);
            else
                break;
        }

        if (s1.empty())
            return s1;

        siter = s1.end();
        while (siter != s1.begin())
        {
            if (isspace(*--siter))
                siter = s1.erase(siter);
            else
                break;
        }
    }
    else
    {
        string::iterator siter = s1.begin();  
        while (siter != s1.end())
        {
            if (chars.find(*siter) != string::npos)
                siter = s1.erase(siter);
            else
                break;
        }

        if (s1.empty())
            return s1;

        siter = s1.end();
        while (siter != s1.begin())
        {
            if (chars.find(*--siter) != string::npos)
                siter = s1.erase(siter);
            else
                break;
        }
    }

    return s1;  
}

string lstrip(const string &s, const string &chars = "")
{
    if (s.empty())
        return s;

    string s1 = s;
    if (chars.empty()) //默認爲空字符
    {  
        string::iterator siter = s1.begin();  
        while (siter != s1.end())
        {
            if (isspace(*siter))
                siter = s1.erase(siter);
            else
                break;
        }
    }
    else
    {
        string::iterator siter = s1.begin();  
        while (siter != s1.end())
        {
            if (chars.find(*siter) != string::npos)
                siter = s1.erase(siter);
            else
                break;
        } 
    }

    return s1;  
}

string rstrip(const string &s, const string &chars = "")
{
    if (s.empty())
        return s;

    string s1 = s;
    if (chars.empty())  //默認爲空字符
    {
        string::iterator siter = s1.end();
        while (siter != s1.begin())
        {
            if (isspace(*--siter))
                siter = s1.erase(siter);
            else
                break;
        }       
    } 
    else
    {
        string::iterator siter = s1.end();
        while (siter != s1.begin())
        {
            if (chars.find(*--siter) != string::npos)
                siter = s1.erase(siter);
            else
                break;
        }        
    }

    return s1;  
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章