目录
前言
Poco库基于C++的string库和wstring库封装了一个对应的String处理库,Poco的string库可以用于实现字符串的格式化,正则表达式、字符串编码等等。
下面介绍一下,Poco库提供给我们常用的一些字符串格式化操作处理,如:字符串裁剪、字符串转换、字符串不区分大小写比较、替换字符串等。
Poco的string库里面的功能函数同一功能函数会分两大类
- 处理后返回字符串的值,不修改原有字符串
- 在原本的字符串上进行修改
Poco的库函数用InPlace来区分这两类函数,即实现同一个功能,如果函数名有带InPlace的,则说明是修改原本的字符串。
下面咱们开始学习几个功能函数
一、Trimming
trim 是poco提供的一个删除字符串开头跟结尾空白的函数
//trim 是poco提供的一个删除字符串开头跟结尾空白的函数
//函数带Inplace的是修改字符串本身,不带Inplace的是返回修改的字符串的值。
void LearnTrim()
{
using Poco::trim;
using Poco::trimLeft;
using Poco::trimRight;
using Poco::trimRightInPlace;
std::string hello(" Hello, baiyu! ");
std::cout << "original string: " << hello << "666" << std::endl;//" Hello, baiyu! 666"
//删除字符串开头的空格
std::string s1(trimLeft(hello)); // "Hello, baiyu! 666"
std::cout << "trimLeft string: " << s1 << "666" << std::endl;
//删除字符串结尾的空格
trimRightInPlace(s1); // "Hello, baiyu!666"
std::cout << "trimRightInPlace: " << s1 << "666" << std::endl;
//删除字符串开头跟结尾的所有空格
std::string s2(trim(hello)); // "Hello, baiyu!666"
std::cout << "trim string: " << s2 << "666" << std::endl;
}
二、大小写转换
//大小写转换函数
void LearnConversion()
{
using Poco::toUpper;
using Poco::toLower;
using Poco::toLowerInPlace;
using Poco::icompare;
std::string s("Hello Baiyu");
std::cout << "original string: " << s << std::endl;
std::string s1(toUpper(s));//HELLO BAIYU
std::cout << "s1 string: " << s1 << std::endl;
std::string s2(toLower(s));//hello baiyu
std::cout << "s2 string: " << s2 << std::endl;
}
三、翻译函数
void LearnTranslate()
{
using Poco::translateInPlace;
std::string s("Hello Baiyu!");
std::cout <<"original: "<< s << std::endl;
//按顺序翻译替换对应的位置的字符
//H-->* e-->5 y-->2 u-->5 !-->0 1-->?
translateInPlace(s, "Heyu!l", "*5250?"); // "*5??o Bai250"
std::cout << "transerlate: " << s << std::endl;
}
四、字符串替换
void LearnSubstringReplace()
{
using Poco::replace;
std::string s("baiyu aaccbb");//baiyu aaccbb
std::cout << s << std::endl;
std::string r(replace(s, "aa", "AA"));//baiyu AAccbb
std::cout << r << std::endl;
r = replace(s, "baiyu", "zhh");//zhh aaccbb
std::cout << r << std::endl;
}
五、字符串对比
void LearnComparison()
{
// icompare的结果如下:
// 0 if str1 == str2
// -1 if str1 < str2
// +1 if str1 > str2
using Poco::icompare;
std::string s1("baiyu");
std::string s2("Baiyu");
std::string s3("hello world");
std::string s4("C");
std::string s5("B");
int rc = icompare(s1, s2);
std::cout << rc << std::endl;
rc = icompare(s1, "zhh");
std::cout << rc << std::endl;
rc = icompare(s4, s5);
std::cout << rc << std::endl;
}
六、字符串拼接
void LearnCat()
{
using Poco::cat;
std::string s;
std::string s1("baiyu, ");
std::string s2("hello world");
s = cat(s1, s2);//直接字符串拼接
std::cout << s << std::endl;
std::vector<std::string> names;
names.push_back("baiyu");
names.push_back("zhh");
names.push_back("man");
//遍历字符串数据拼接,delim是连接符
s = cat(std::string(", "), names.begin(), names.end());
// "baiyu, zhh, man"
std::cout << s << std::endl;
}
总结
Poco库封装的字符串函数还是比较容易用的~
关于Poco库的String函数的更多具体使用,参考Poco/String.h这个头文件