1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > python rstrip函数_【C++实现python字符串函数库】strip lstrip rstrip方法

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

时间:2020-01-06 12:41:11

相关推荐

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

【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;

}

测试结果

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。