博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【C++实现python字符串函数库】strip、lstrip、rstrip方法
阅读量:6243 次
发布时间:2019-06-22

本文共 3027 字,大约阅读时间需要 10 分钟。

【C++实现python字符串函数库】strip、lstrip、rstrip方法

这三个方法用于删除字符串首尾处指定的字符,默认删除空白符(包括'\n', '\r', '\t', ' ')。

s.strip(rm) 删除s字符串中开头、结尾处,位于 rm删除序列的字符

s.lstrip(rm) 删除s字符串中开头处,位于 rm删除序列的字符

s.rstrip(rm) 删除s字符串中结尾处,位于 rm删除序列的字符

示例:

>>> s='   abcdefg    ' #默认情况下删除空白符>>> s.strip()'abcdefg'>>>
>>>#位于字符串首尾且在删除序列中出现的字符全部被删掉 >>> s = 'and looking down on tomorrow'>>> s.strip('awon')'d looking down on tomorr'>>>

lsprit是只处理字符串的首部(左端),rsprit是只处理字符串的尾部(右端)。

C++实现

#define LEFTSTRIP 0    #define RIGHTSTRIP 1    #define BOTHSTRIP 2

函数

内部调用函数do_strip

std::string do_strip(const std::string &str, int striptype, const std::string&chars)    {        std::string::size_type strlen = str.size();        std::string::size_type charslen = chars.size();        std::string::size_type i, j;        //默认情况下,去除空白符        if (0 == charslen)        {            i = 0;            //去掉左边空白字符            if (striptype != RIGHTSTRIP)            {                while (i < strlen&&::isspace(str[i]))                {                    i++;                }            }            j = strlen;            //去掉右边空白字符            if (striptype != LEFTSTRIP)            {                j--;                while (j >= i&&::isspace(str[j]))                {                    j--;                }                j++;            }        }        else        {            //把删除序列转为c字符串            const char*sep = chars.c_str();            i = 0;            if (striptype != RIGHTSTRIP)            {                //memchr函数:从sep指向的内存区域的前charslen个字节查找str[i]                while (i < strlen&&memchr(sep, str[i], charslen))                {                    i++;                }            }            j = strlen;            if (striptype != LEFTSTRIP)            {                j--;                while (j >= i&&memchr(sep, str[j], charslen))                {                    j--;                }                j++;            }            //如果无需要删除的字符            if (0 == i&& j == strlen)            {                return str;            }            else            {                return str.substr(i, j - i);            }        }    }

strip函数

std::string strip( const std::string & str, const std::string & chars=" " )    {        return do_strip( str, BOTHSTRIP, chars );    }

lstrip函数

std::string lstrip( const std::string & str, const std::string & chars=" " )    {        return do_strip( str, LEFTSTRIP, chars );    }

rstrip函数

std::string rstrip( const std::string & str, const std::string & chars=" " )    {        return do_strip( str, RIGHTSTRIP, chars );    }

测试

int main(){    string str = "     abcdefg";    string result;    //不给定删除序列时默认删除空白字符串    result = strip(str);    cout << "默认删除空白符:" << result << endl;    //指定删除序列    result = strip(str, "gf");    cout << "指定删除序列gf:" << result << endl;    str = "abcdefg";    string chars = "abfg";    //只删除左边    result = lstrip(str, chars);    cout << "删除左边" << result << endl;    //只删除右边    result = rstrip(str, chars);    cout << "删除右边" << result << endl;    system("pause");    return 0;}

测试结果

610439-20150911224531606-2052092395.png

转载地址:http://zypia.baihongyu.com/

你可能感兴趣的文章
linux 查找目录下的文件内容并替换(批量)
查看>>
iphone遮住听筒/感应器/摄像头黑屏的解决办法
查看>>
python 抓取alexa数据
查看>>
UART、SPI和I2C详解
查看>>
兼容N多浏览器的CSS阴影效果
查看>>
Multiple arguments in Django template filters
查看>>
ARM11-Linux2.6-Button-Driver-Base-info
查看>>
抽屉Panel的研究
查看>>
In-App Purchase
查看>>
深圳it公司
查看>>
glog 使用中存在的问题
查看>>
WCF, the Service attribute value in the ServiceHost directive could not be found.
查看>>
Scriptcase价格调整(五折销售)
查看>>
【转】 编写C#调用的C++DLL
查看>>
Programming Concepts
查看>>
【Linux】用grep在文档中查找内容
查看>>
音视频编码格式和封装格式的关系和区别是什么?
查看>>
ORACLE 表空间使用率查询
查看>>
cadence制作封装要素
查看>>
Web实时通信
查看>>