C++中的String和STL是什么关系

2024-12-16 01:29:46
推荐回答(3个)
回答1:

标准模板库(Standard Template Library,STL)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。 STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类和模板函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。在C++标准中,STL被组织为下面的13个头文件:

string 和 vector、list一样,都是标准库类型。
string 类型支持长度可变的字符串,C++ 标准库将负责管理与存储字符相关的内存,以及提供各种有用的操作。

#include
using std::string;

字符串字面值与标准库 string 类型不是同一种类型。

用 iostream 和 string 标准库,使用标准输入输出操作符来读写 string 对象

读取并忽略开头所有的空白字符(如空格,换行符,制表符)。
读取字符直至再次遇到空白字符,读取终止。

读入未知数目的 string 对象

使用 getline 读取整行文本

getline 函数从输入流的下一行读取,并保存读取的内容到不包括换行符。和输入操作符不一样的是,getline 并不忽略行开头的换行符。只要 getline 遇到换行符,即便它是输入的第一个字符,getline 也将停止读入并返回。如果第一个字符就是换行符,则 string 参数将被置为空 string。由于 line 不含换行符,若要逐行输出需要自行添加。

Cpp代码
1.#include
2.#include
3.using namespace std;
4.
5.int main()
6.{
7. string word;
8. // read until end-of-file, writing each word to a new line
9. while (cin >> word)
10. {
11. cout << word << endl;
12. }
13. string line;
14. // read line at time until end-of-file
15. while (getline(cin, line))
16. {
17. cout << line << endl;
18. }
19. return 0;
20.}
#include
#include
using namespace std;

int main()
{
string word;
// read until end-of-file, writing each word to a new line
while (cin >> word)
{
cout << word << endl;
}
string line;
// read line at time until end-of-file
while (getline(cin, line))
{
cout << line << endl;
}
return 0;
} 关于size_type:
string 类类型和许多其他库类型都定义了一些配套类型(companion type)。通过这些配套类型,库类型的使用就能与机器无关(machine-independent)。size_type 就是这些配套类型中的一种。它定义为与 unsigned 型(unsigned int 或 unsigned long)具有相同的含义,而且可以保证足够大能够存储任意 string 对象的长度。

string 关系操作符
关系操作符比较两个 string 对象时采用了和(大小写敏感的)字典排序相同的策略
如果两个 string 对象长度不同,且短的 string 对象与长的 string 对象的前面部分相匹配,则短的 string 对象小于长的 string 对象。
如果 string 对象的字符不同,则比较第一个不匹配的字符

两个 string 对象相加

string 对象的加法被定义为连接(concatenation)。也就是说,两个(或多个)string 对象可以通过使用加操作符 + 或者复合赋值操作符 +=连接起来。

string和字符串字面值的连接
当进行 string 对象和字符串字面值混合连接操作时,+ 操作符的左右操作数必须至少有一个是 string 类型的

从 string 对象获取字符
string 类型通过下标操作符([ ])来访问 string 对象中的单个字符。下标操作符需要取一个 size_type 类型的值,来标明要访问字符的位置。
string 对象的下标从 0 开始。如果 s 是一个 string 对象且 s 不空,则 s[0] 就是字符串的第一个字符, s[1] 就表示第二个字符(如果有的话),而 s[s.size() - 1] 则表示 s 的最后一个字符。

引用下标时如果超出下标作用范围就会引起溢出错误。
下标操作可用作左值

Cpp代码
1.#include
2.#include
3.using namespace std;
4.
5.int main()
6.{
7. string s1 = "hello"; // no punctuation
8. string s2 = "world";
9. string s3 = s1 + ", "; // ok: adding a string and a literal
10. //string s4 = "hello" + ", "; error: no string operand
11. string s5 = s1 + ", " + "world"; // ok: each + has string operand
12. //string s6 = "hello" + ", " + s2; error: can't add string literals
13.
14. for (string::size_type ix = 0; ix != s5.size(); ++ix)
15. {
16. cout << s5[ix];
17. }
18. cout << endl;
19. for (string::size_type ix = 0; ix != s5.size(); ++ix)
20. {
21. s5[ix] = '*';
22. }
23.
24. return 0;
25.}
#include
#include
using namespace std;

int main()
{
string s1 = "hello"; // no punctuation
string s2 = "world";
string s3 = s1 + ", "; // ok: adding a string and a literal
//string s4 = "hello" + ", "; error: no string operand
string s5 = s1 + ", " + "world"; // ok: each + has string operand
//string s6 = "hello" + ", " + s2; error: can't add string literals

for (string::size_type ix = 0; ix != s5.size(); ++ix)
{
cout << s5[ix];
}
cout << endl;
for (string::size_type ix = 0; ix != s5.size(); ++ix)
{
s5[ix] = '*';
}

return 0;
}

Cpp代码
1.#include
2.#include
3.#include
4.using namespace std;
5.
6.int main()
7.{
8. string line;
9. getline(cin,line);
10.
11. int alpha = 0;
12. int digit = 0;
13. int punct = 0;
14. int space = 0;
15.
16. for(string::size_type index=0; index != line.size(); ++index)
17. {
18. if(isalpha(line[index]))
19. {
20. ++alpha;
21. }
22. if(isdigit(line[index]))
23. {
24. ++digit;
25. }
26. if(ispunct(line[index]))
27. {
28. ++punct;
29. }
30. if(isspace(line[index]))
31. {
32. ++space;
33. }
34. }
35. cout << "alpha : " << alpha << endl;
36. cout << "digit : " << digit << endl;
37. cout << "punct : " << punct << endl;
38. cout << "space : " << space << endl;
39.
40. return 0;
41.}

回答2:

string实际上就是vector,便于程序员操作字符串的类库。
STL是一些列容器、迭代器和算法的集合,帮程序员对内存的管理进行看了封装。便于程序员更高效的开发程序。

回答3:

STL = Standard Template Library,标准模板库。string 和 vector、list一样,都是标准库类型。