
The
string类是通过在STL中实例化basic_string模板而获得的模板类. 其定义如下:
typedef basic_string字符串;
basic_string无需在此处进行详细说明.
字符串类的成员函数很多,并且具有相同名称的函数通常具有五个或六个重载版本. 由于篇幅所限,无法列出和解释这些原型. 在这里,我们仅根据常用成员函数的功能对其进行分类,并直接给出应用示例. 通过这些示例字符串,读者可以基本掌握这些成员函数的用法.
如果您想了解有关字符串类的更多信息,还应该阅读C ++参考手册或编译器随附的信息. 关于先前介绍的字符串处理的内容,此处将不再重复描述. 1.构造函数字符串类具有多个构造函数. 用法示例如下:
string s1(); // si = ""
string s2("Hello"); // s2 = "Hello"
string s3(4, K); // s3 = "KKKK"
string s4("12345", 1, 3); //s4 = "234",即 "12345" 的从下标 1 开始,长度为 3 的子串
便于寻址. 在本教程后面的内容中,从字符串下标n开始且长度为m的字符串称为“子字符串(n,m)”.
The

string类没有接受整数参数或字符参数的构造函数. 以下两种书写方式是错误的:
string s1(K); string s2(123);
2. 给字符串对象赋值可以使用char *类型的变量和常量,而char类型的变量和常量可以给字符串对象赋值. 例如:
string s1; s1 = "Hello"; // s1 = "Hello" s2 = K; // s2 = "K”
字符串类还具有一个分配成员函数,可用于为字符串对象分配值. Assign成员函数返回对对象本身的引用. 例如:
string s1("12345"), s2;
s3.assign(s1); // s3 = s1
s2.assign(s1, 1, 2); // s2 = "23",即 s1 的子串(1, 2)
s2.assign(4, K); // s2 = "KKKK"
s2.assign("abcde", 2, 3); // s2 = "cde",即 "abcde" 的子串(2, 3)
3. 查找字符串的长度length成员函数返回字符串的长度. size成员函数可以实现相同的功能. 4.字符串对象中字符串的连接除了+和+ =运算符可对字符串对象执行字符串连接操作外,字符串类还具有一个append成员函数,可用于将内容添加到字符串对象的后面字符串. append成员函数返回对对象本身的引用. 例如:
string s1("123"), s2("abc");
s1.append(s2); // s1 = "123abc"
s1.append(s2, 1, 2); // s1 = "123abcbc"
s1.append(3, K); // s1 = "123abcbcKKK"
s1.append("ABCDE", 2, 3); // s1 = "123abcbcKKKCDE",添加 "ABCDE" 的子串(2, 3)
5. 除了将字符串对象与运算符进行比较之外,字符串类还具有一个比较成员函数,可用于比较字符串. 比较成员函数具有以下返回值:

例如:
string s1("hello"), s2("hello, world");
int n = s1.compare(s2);
n = s1.compare(1, 2, s2, 0, 3); //比较s1的子串 (1,2) 和s2的子串 (0,3)
n = s1.compare(0, 2, s2); // 比较s1的子串 (0,2) 和 s2
n = s1.compare("Hello");
n = s1.compare(1, 2, "Hello"); //比较 s1 的子串(1,2)和"Hello”
n = s1.compare(1, 2, "Hello", 1, 2); //比较 s1 的子串(1,2)和 "Hello" 的子串(1,2)
6. 查找字符串对象的子字符串. substr成员函数可用于查找子字符串(n,m). 原型如下:
string substr(int n = 0,int m = string :: npos)const;
打电话时
,如果省略m或m超过字符串的长度,则获得的子字符串是从下标n到字符串末尾的部分. 例如:
string s1 = "this is ok"; string s2 = s1.substr(2, 4); // s2 = "is i" s2 = s1.substr(2); // s2 = "is is ok"
7. 交换两个字符串对象的内容交换成员函数可以交换两个字符串对象的内容. 例如:
string s1("West”), s2("East");
s1.swap(s2); // s1 = "East",s2 = "West"

8. 查找子字符串和字符串类具有一些用于查找子字符串和字符的成员函数,它们的返回值是子字符串或字符在字符串对象字符串中的位置(即下标). 如果找不到,则返回string :: npos. string: : npos是在字符串类中定义的静态常量. 这些功能如下:
以下是用于查找字符串类的成员函数的示例程序.
#include <iostream> #include <string> using namespace std; int main() { string s1("Source Code"); int n; if ((n = s1.find(u)) != string::npos) //查找 u 出现的位置 cout << "1) " << n << "," << s1.substr(n) << endl; //输出 l)2,urce Code if ((n = s1.find("Source", 3)) == string::npos) //从下标3开始查找"Source",找不到 cout << "2) " << "Not Found" << endl; //输出 2) Not Found if ((n = s1.find("Co")) != string::npos) //查找子串"Co"。能找到,返回"Co"的位置 cout << "3) " << n << ", " << s1.substr(n) << endl; //输出 3) 7, Code if ((n = s1.find_first_of("ceo")) != string::npos) //查找第一次出现或 c、e或o的位置 cout << "4) " << n << ", " << s1.substr(n) << endl; //输出 4) l, ource Code if ((n = s1.find_last_of(e)) != string::npos) //查找最后一个 e 的位置 cout << "5) " << n << ", " << s1.substr(n) << endl; //输出 5) 10, e if ((n = s1.find_first_not_of("eou", 1)) != string::npos) //从下标1开始查找第一次出现非 e、o 或 u 字符的位置 cout << "6) " << n << ", " << s1.substr(n) << endl; //输出 6) 3, rce Code return 0; }
9. 替换子字符串替换成员函数可以替换字符串对象中的子字符串,并且返回值是对对象本身的引用. 例如:
string s1("Real Steel");
s1.replace(1, 3, "123456", 2, 4); //用 "123456" 的子串(2,4) 替换 s1 的子串(1,3)
cout << s1 << endl; //输出 R3456 Steel
string s2("Harry Potter");
s2.replace(2, 3, 5, 0); //用 5 个 0 替换子串(2,3)
cout << s2 << endl; //输出 HaOOOOO Potter
int n = s2.find("OOOOO"); //查找子串 "00000" 的位置,n=2
s2.replace(n, 5, "XXX"); //将子串(n,5)替换为"XXX"
cout << s2 < < endl; //输出 HaXXX Potter
10. 删除子字符串擦除成员函数可以删除字符串对象中的子字符串,并且返回值是对对象本身的引用. 例如:
string s1("Real Steel");
s1.erase(1, 3); //删除子串(1, 3),此后 s1 = "R Steel"
s1.erase(5); //删除下标5及其后面的所有字符,此后 s1 = "R Ste"
11. 插入字符串insert成员函数可以将另一个字符串插入字符串对象,并且返回值是对该对象本身的引用. 例如:
string s1("Limitless"), s2("00");
s1.insert(2, "123"); //在下标 2 处插入字符串"123",s1 = "Li123mitless"
s1.insert(3, s2); //在下标 2 处插入 s2 , s1 = "Li10023mitless"
s1.insert(3, 5, X); //在下标 3 处插入 5 个 X,s1 = "Li1XXXXX0023mitless"

12. 使用流对象istringstream和ostringstream将字符串对象视为流,并且可以将字符串对象用作输入和输出的流. 要使用这两个类,您需要包括头文件sstream.
示例程序如下:
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main()
{
string src("Avatar 123 5.2 Titanic K");
istringstream istrStream(src); //建立src到istrStream的联系
string s1, s2;
int n; double d; char c;
istrStream >> s1 >> n >> d >> s2 >> c; //把src的内容当做输入流进行读取
ostringstream ostrStream;
ostrStream << s1 << endl << s2 << endl << n << endl << d << endl << c <<endl;
cout << ostrStream.str();
return 0;
}
程序的输出为:
头像
泰坦尼克号
123
5.2
K
第11行字符串,从输入流istrStream读取,该过程与从cin读取的过程相同,只是输入源从键盘更改为字符串对象src. 因此,将“ Avatar”读取到s1,将123读取到n,将5.2读取到d,将“ Titanic”读取到s2,并将“ K”读取到c.
第12行,将变量的值输出到流ostrStream. 输出结果不会出现在屏幕上,而是存储在由ostrStream对象管理的位置. 可以使用ostringstream类的str成员函数提取输出到ostringstream对象的内容. 13.使用STL算法处理字符串对象. 字符串对象也可以视为顺序容器. 它支持随机访问迭代器,还具有诸如begin和end之类的成员函数. STL中的许多算法也适用于字符串对象. 以下是使用STL算法处理字符串对象的程序示例.
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-288983-1.html
霉菌给了中国加大岛礁建设的绝佳良机
luna
马云自己就靠炒股发财
只是在阴沟里不容易被发觉