C++中string类型的使用方法总结

string简单操作:

string s;

定义一个新的空 string 对象,命名为 s。

string s(cp);

定义一个新的 string 对象,用 cp 所指向的(以空字符

null 结束的)C 风格字符串初始化该对象。

string s(s2);

定义一个新的 string 对象,并将它初始化为 s2 的副本。

is >> s;

从输入流 is 中读取一个以空白字符分隔的字符串,写入 s。

os << s;

将 s 写到输出流 os 中。

getline(is, s);

从输入流 is 中读取一行字符,写入 s。

s1 + s2

把 s1 和 s2 串接起来,产生一个新的 string 对象。

s1 += s2

将 s2 拼接在 s1 后面。

关系操作符

相等运算(== 和 !=)以及关系运算(<、<=、> 和 >=)都可用于 string 对象的比较,等效于(区分大小写的)字典次序的比较。

string类型支持的顺序容器操作:

string类型不支持以绽放时操作容器,因此不能使用front、back和pop_back操作。

1. 支持typedef,包括迭代器类型。

2. 支持容器构造函数。

但是不包括只需要一个长度参数的构造函数。

3. 支持vector 容器所提供的添加元素的操作。

注意:无论vector 容器还是 string 类型都不支持 push_front 操作。

4. 支持容器大小操作。

5. 支持下标和 at 操作。但 string 类型不提供该表列出的 back和 front 操作。

6. 支持begin 和 end操作。

7. 支持erase 和 clear 操作。

但是 string 类型不入提供pop_back 或 pop_front 操作。

8. 支持容器的赋值操作。

9. 与 vector 容器的元素一样,string 的字符也是连续存储的。因此,string 类型支持capacity 和 reserve 操作。

构造string对象的其他方法:

string s(cp, n)

创建一个 string 对象,它被初始化为 cp 所指向数组的前 n 个元素的副本。

string s(s2, pos2)

创建一个 string 对象,它被初始化为一个已存在的 string 对象

s2 中从下标 pos2 开始的字符的副本。

string s(s2, pos2, len2)

创建一个 string 对象,它被初始化为 s2 中从下标 pos2 开始的

len2 个字符的副本。如果 pos2 > s2.size(),则该操作未定义,无论 len2 的值是多少,最多只能复制 s2.size() - pos2 个字符。

注意:n、len2和pos2都是unsigned值。

修改string的方法:

与容器共有的string操作

s.insert(p, t)

在迭代器 p 指向的元素之前插入一个值为 t 的新元素。返回指向新插入元素的迭代器。

s.insert(p, n, t)

在迭代器 p 指向的元素之前插入 n 个值为 t 的新元素。返回 void。

s.insert(p, b, e)

在迭代器 p 指向的元素之前插入迭代器 b 和 e 标记范围内所有的元素。返回 void。

s.assign(b, e)

在迭代器 b 和 e 标记范围内的元素替换 s。对于 string 类型,该操作返回 s;对于容器类型,则返回 void。

s.assign(n, t)

用值为 t 的 n 个副本替换 s。对于 string 类型,该操作返回 s;对于容器类型,则返回 void。

s.erase(p)

删除迭代器 p 指向的元素。返回一个迭代器,指向被删除元素后面的元素。

s.erase(b,e)

删除迭代器 b 和 e 标记范围内所有的元素。返回一个迭代器,指向被删除元素段后面的第一个元素。

string类型特有的版本

s.insert(pos, n, c)

在下标为 pos 的元素之前插入 n 个字符 c。

s.insert(pos, s2)

在下标为 pos 的元素之前插入 string 对象 s2 的副本。

s.insert(pos, s2, pos2, len)

在下标为 pos 的元素之前插入 s2 中从下标 pos2 开始的 len 个字符。

s.insert(pos, cp, len)

在下标为 pos 打元素之前插入 cp 所指向数组的前len 个字符。

s.insert(pos, cp)

在下标为 pos 的元素之前插入 cp 所指向的以空字符结束的字符串副本。

s.assign(s2)

用 s2 的副本替换 s。

s.assign(s2, pos2, len)

用 s2 中从下标 pos2 开始的 len 个字符副本替换 s。

s.assign(cp, len)

用 cp 所指向数组的前 len 个字符副本替换 s。

s.assign(cp)

用 cp 所指向的以空字符结束的字符串副本替换 s。

s.erase(pos, len)

删除从下标 pos 开始的 len 个字符。

除此特殊声明,上述所有操作都返回s的引用

只适用于string类型的操作:

子串操作

s.substr(pos. n)

返回一个 string 类型的字符串,它包含 s 中从下标 pos开始的 n 个字符。

s.substr(pos)

返回一个 string 类型的字符串,它包含从下标 pos 开始到s 末尾的所有字符。

s.substr()

返回 s 的副本。

append和replace函数:

修改string对象的操作

s.append(args)

将 args 串接在 s 后面。返回 s 引用。

s.replace(pos, len, args)

删除 s 中从下标 pos 开始的 len 个字符,用 args指定的字符替换之。返回 s 的引用。

在这个版本中,args 不能为 b2e2

s.replace(b, e, args)

删除迭代器 b 和 e 标记范围内所有的字符,用 args替换之。返回 s 的引用。

在这个版本中,args 不能为 s2pos2len2

append和replace操作的参数:args

s2

string 类型的字符串 s2。

s2, pos2, len2

字符串 s2 中从下标 pos2 开始的 len2 个字符。

cp

指针 cp 指向的以空字符结束的数组。

cp, len2

cp 指向的以空字符结束的数组中前 len2 个字符。

n, c

字符 c 的 n 个副本。

b2, e2

迭代器 b2 和 e2 标记的范围内所有字符。

string类型的查找操作:

string类型的查找操作

s.find(args)

在 s 中查找 args 的第一次出现。

s.rfind(args)

在 s 中查找 args 的最后一次出现。

s.find_first_of(args)

在 s 中查找 args 的任意字符的第一次出现。

s.find_last_of(args)

在 s 中查找 args 的任意字符的最后一次出现。

s.find_first_not_of(args)

在 s 中查找第一个不属于 args 的字符。

s.find_last_not_of(args)

在 s 中查找最后一个不属于 args 的字符。

上述函数都有四个重载函数,string类型提供的find操作的参数

c, pos

在 s 中,从下标 pos 标记的位置开始,查找字符 c。pos 的默认值为 0。

s2, pos

在 s 中,从下标 pos 标记的位置开始,查找 string 对象 s2。pos 的默认值为 0。

cp, pos

在 s 中,从下标 pos 标记的位置形参,查找指针 cp 所指向的 C 风格的以空字符结束的字符串。pos 的默认值为 0。

cp, pos, n

在 s 中,从下标 pos 标记的位置开始,查找指针 cp 所指向数组的前 n 个字符。pos 和 n 都没有默认值。

string对象的比较

string类型的compare操作

s.compare(s2)

比较 s 和 s2。

s.compare(pos1, n1, s2)

让 s 中从 pos 下标位置开始的 n1 个字符与 s2 做比较。

s.compare(pos1, n1, s2, pos2, n2)

让 s 中从 pos1 下标位置开始的 n1 个字符与 s2 中从 pos2下标位置开始的 n2 个字符做比较。

s.compare(cp)

比较 s 和 cp 所指向的以空字符结束的字符串。

s.compare(pos1, n1, cp)

让 s 中从 pos1 下标位置开始的 n1 个字符与 cp 所指向的字符串做比较。

s.compare(pos1, n1, cp, n2)

让 s 中从 pos1 下标位置开始的 n1 个字符与 cp 所指向的字符串的前 n2 个字符做比较。

compare函数返回下面列出的三种可能值之一:

1. 正数,此时s1大于args所代表的string对象。

2. 负数,此时s1小于args所代表的string对象。

3. 0,此时s1恰好等于args所代表的string对象。