本文共 2261 字,大约阅读时间需要 7 分钟。
标准C++中string类函数介绍
之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为它和前者比较起来,更加方便高效。string类作为一个自带内存管理的类,不用担心内存是否足够、字符串长度等等问题。我们可以用=进行赋值操作,==进行比较,+进行串联操作,甚至可以将其看作C++的基本数据类型。
为了在程序中使用string类型,必须包含头文件<string>。注意,这不是string.h,后者是C字符串头文件。使用string类时,需要在代码开头声明using namespace std;。
声明一个字符串变量非常简单:
string Str;
这样我们就声明了一个空字符串Str。string类具有构造函数和析构函数,提供了多种初始化方式:
string s;:生成一个空字符串s。string s(str);:拷贝构造函数生成str的复制品。string s(str, stridx);:将str内“始于位置stridx”的部分作为字符串的初值。string s(str, stridx, strlen);:将str内“始于stridx且长度最多strlen”的部分作为字符串的初值。string s(cstr);:将C字符串作为s的初值。string s(chars, chars_len);:将C字符串前chars_len个字符作为s的初值。string s(num, c);:生成一个包含num个c字符的字符串。string s(beg, end);:以区间beg到end(不包含end)内的字符作为字符串s的初值。s.~string();:销毁字符串,释放内存。string类提供了丰富的操作函数,涵盖了赋值、比较、插入、删除、替换、连接等功能。以下是主要操作函数:
=, assign()swap()+=, append(), push_back()insert()erase()replace()==, !=, <, <=, >, >=, compare()size(), length(), max_size(), capacity()[], at()>>, <<, getline()find(), rfind(), find_first_of(), find_last_of(), find_first_not_of(), find_last_not_of()substr()begin(), end(), rbegin(), rend()C++字符串可以通过data(), c_str(), 和copy()等方法转换为C字符串。c_str()返回一个以'\0'结尾的C字符串,而data()返回一个不以'\0'结尾的字符数组。使用string进行编程时,除非必须使用C字符串,否则应优先使用string类。
string支持>, >=, <, <=, ==, !=等比较操作。compare()方法提供了更灵活的比较功能,可以指定比较的位置和长度。compare(pos, n, s)方法可以比较当前字符串从pos开始的n个字符与string``s的大小。
string类的赋值操作非常灵活,支持以下方式:
string s = "hello";s.assign(str);s.assign(str, 1, 3);s.assign("gaint");s.append(str);s.insert(0, "my name");s.replace(1, 2, "nternationalizatio");通过<sstream>头文件,可以将string与输入流和输出流进行交互。例如:
string input("hello,this is a test");istringstream is(input);string s1, s2, s3, s4;is >> s1 >> s2 >> s3 >> s4; // s1="hello", s2="this", s3="is", s4="test"ostringstream os;os << s1 << s2 << s3 << s4;cout << os.str(); string类提供了多种查找和替换函数,可以高效地处理字符串中的字符或子串。例如:
string s = "il8n";s.replace(1, 2, "nternationalizatio"); // 在位置1开始替换2个字符为"nternationalizatio"s.erase(13); // 删除从位置13开始的所有字符s.find_last_not_of("abc"); // 查找字符串中最后一个不在"abc"中的字符的位置 string类提供了类似STL的迭代器支持,可以使用begin(), end(), rbegin(), rend()等方法进行向前和向后遍历。同时,通过<sstream>头文件,可以将string与输入输出流进行交互。
转载地址:http://thqfk.baihongyu.com/