C++標准庫string
定義和初始化
| string s1 | 默認初始化,s1是一個空串 |
|---|---|
| string s2(s1) | s2是s1的副本 |
| string s2 = s1 | 等價於s2(s1),s2是s1的副本 |
| string s3("value") | s3是字面值"value"的副本,除了字面值最后的那個空字符外 |
| string s3 = "value" | 等價於s3("value"),s3是字面值"value"的副本 |
| string s4(n, 'c') | 把s4初始化為由連續n個字符c組成的串 |
直接初始化和拷貝初始化
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s1; // 默認初始化,空字符串
string s2("haha"); // 直接初始化
string s3 = "haha"; // 拷貝初始化
string s4(10, 'a'); // 直接初始化
cout << s1 << endl
<< s2 << endl
<< s3 << endl
<< s4 << endl;
system("pause");
return 0;
}
程序輸出結果
haha
haha
aaaaaaaaaa
請按任意鍵繼續. . .
string對象上的操作

讀寫string對象
- 寫入一個字符串。
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s;
cin >> s;
cout << s << endl;
system("pause");
return 0;
}
程序輸出結果
hello world
hello
請按任意鍵繼續. . .
- 寫入兩個字符串。
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s1, s2;
cin >> s1 >> s2;
cout << s1 << s2 << endl;
system("pause");
return 0;
}
程序輸出結果
hello world
helloworld
請按任意鍵繼續. . .
- 讀取未知數量的string對象
#include<iostream>
#include<string>
using namespace std;
int main()
{
string word;
while (cin >> word)
cout << word << endl;
system("pause");
return 0;
}
程序輸出結果
hi
hi
visual
visual
studio
studio
^Z
請按任意鍵繼續. . .
使用ctrl + Z結束輸入。
使用getline讀取一整行
保留字符串中的空白符,從給定的輸入流中讀入內容,直到遇到換行符位置,然后把所讀的內容存入到string對象中。
#include<iostream>
#include<string>
using namespace std;
int main()
{
string line;
while (getline(cin, line))
cout << line;
system("pause");
return 0;
}
程序輸出結果
hello hi !!!
hello hi !!!
wooohhh woc
wooohhh woc
^Z
請按任意鍵繼續. . .
- 只輸出非空的行
#include<iostream>
#include<string>
using namespace std;
int main()
{
string line;
while (getline(cin, line))
// 只輸出非空的行
if(!line.empty())
cout << line;
system("pause");
return 0;
}
- 只輸出超過10個字符的行
#include<iostream>
#include<string>
using namespace std;
int main()
{
string line;
while (getline(cin, line))
// 只輸出超過10個字符的行
if (line.size()>10)
cout << line;
system("pause");
return 0;
}
程序輸出結果
hello
hello world
hello world
^Z
請按任意鍵繼續. . .
string對象相加
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s1 = "hello";
string s2 = " world\n";
//string s3 = "hello" + " world\n"; //錯誤
string s3 = s1 + s2;
string s4 = s1 + " haha\n"; //正確,字面值可以和string對象相加
cout << s3 << endl;
cout << s4 << endl;
system("pause");
return 0;
}
程序運行結果
hello world
hello haha
請按任意鍵繼續. . .
處理string對象中的字符
-
cctype頭文| isalnum(c) | 如果c是字母或數字,則返回True |
|--------------|------------------------------------------------------|
| isalpha(c) | 如果c是字母,則返回true |
| iscntrl(c) | 如果c是控制字符,則返回true |
| isdigit(c) | 如果c是數字,則返回true |
| isgraph(c) | 如果c不是空格,但可打印,則為true |
| islower(c) | 如果c是小寫字母,則為true |
| isprint(c) | 如果c是可打印字符,則為true |
| ispunct(c) | 如果c是標點符號,則為true |
| isspace(c) | 如果c是空白是否,則為true |
| isupper(c) | 如果c是大寫字母,則為true |
| isxdigit(c) | 如果c是十六進制的數,則為true |
| tolower(c) | 如果c是大寫字母,返回其小寫字母的形式,否則直接返回c |
| toupper(c) | 如果c是小寫字母,返回其大寫字母的形式,否則直接返回c |
件中的函數 -
把string對象中的字符每行打印出來
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s1 = "some string";
cout << "method a" << endl;
for (auto c : s1)
cout << c << endl;
//that equals to
cout << "method b" << endl;
for (int i = 0; i < s1.size(); ++i)
cout << s1[i] << endl; // 通過下標索引
system("pause");
return 0;
}
程序輸出結果
method a
s
o
m
e
s
t
r
i
n
g
method b
s
o
m
e
s
t
r
i
n
g
請按任意鍵繼續. . .
- 統計string對象中標點符號的個數
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s1 = "hello, world!!!";
decltype(s1.size()) count = 0;
for (auto c : s1)
if (ispunct(c))
++count;
cout << s1 + "中共有"
<<count
<<"個標點符號" << endl;
system("pause");
return 0;
}
程序輸出結果
hello, world!!!中共有4個標點符號
請按任意鍵繼續. . .
當然還可以實現其他很多功能,就不一一列舉。
