string 容器基本概念
C 风格字符串
(
以空字符结尾的字符数组
)
太过复杂难于掌握,不适合大程序的开发, 所以 C++
标准库定义了一种
string
类,定义在头文件。
String
和
c
风格字符串对比:
u Char*是一个指针,
String
是一个类 string 封装了 char
,管理这个字符串,是一个
char
型的容器。
u String 封装了很多实用的成员方法
查找 find,拷贝
copy
,删除
delete
替换
replace
,插入
insert
u 不用考虑内存释放和越界
string 管理 char*
所分配的内存。每一次
string
的复制,取值都由
string
类负责维护,不用担心复制越界和取值越界等。
string 构造函数
string();//创建一个空的字符串 例如
: string str;
string(const string& str);//使用一个
string
对象初始化另一个
string
对象
string(const char* s);//使用字符串
s
初始化
string(int n, char c);//使用
n
个字符
c
初始化
string 基本赋值操作
string&
operator
=(
const
char
* s);
//char*
类型字符串 赋值给当前的字符串
string&
operator
=(
const
string &s);
//
把字符串
s
赋给当前的字符串
string&
operator
=(
char
c);
//
字符赋值给当前的字符串
string& assign(
const
char
*s);
//
把字符串
s
赋给当前的字符串
string& assign(
const
char
*s,
int
n);
//
把字符串
s
的前
n
个字符赋给当前的字
符串
string& assign(
const
string &s);
//
把字符串
s
赋给当前字符串
string& assign(
int
n,
char
c);
//
用
n
个字符
c
赋给当前字符串
string& assign(
const
string &s,
int
start,
int
n);
//
将
s
从
start
开始
n
个
字符赋值给字符串
string 存取字符操作
char
&
operator
[](
int
n);
//
通过
[]
方式取字符
char
& at(
int
n);
//
通过
at
方法获取字符
string 拼接操作
string&
operator
+=(
const
string& str);
//
重载
+=
操作符
string&
operator
+=(
const
char
* str);
//
重载
+=
操作符
string&
operator
+=(
const
char
c);
//
重载
+=
操作符
string& append(
const
char
*s);
//
把字符串
s
连接到当前字符串结尾
string& append(
const
char
*s,
int
n);
//
把字符串
s
的前
n
个字符连接到当前字
符串结尾
string& append(
const
string &s);
//
同
operator+=()
string& append(
const
string &s,
int
pos,
int
n);
//
把字符串
s
中从
pos
开始
的
n
个字符连接到当前字符串结尾
string& append(
int
n,
char
c);
//
在当前字符串结尾添加
n
个字符
c
string 查找和替换
int
find(
const
string& str,
int
pos =
0
)
const
;
//
查找
str
第一次出现位置
,
从
pos
开始查找
int
find(
const
char
* s,
int
pos =
0
)
const
;
//
查找
s
第一次出现位置
,
从
po
s
开始查找
int
find(
const
char
* s,
int
pos,
int
n)
const
;
//
从
pos
位置查找
s
的前
n
个字符第一次位置
int
find(
const
char
c,
int
pos =
0
)
const
;
//
查找字符
c
第一次出现位置
int
rfind(
const
string& str,
int
pos = npos)
const
;
//
查找
str
最后一次位
置
,
从
pos
开始查找
int
rfind(
const
char
* s,
int
pos = npos)
const
;
//
查找
s
最后一次出现位置
,
从
pos
开始查找
int
rfind(
const
char
* s,
int
pos,
int
n)
const
;
//
从
pos
查找
s
的前
n
个字符
最后一次位置
int
rfind(
const
char
c,
int
pos =
0
)
const
;
//
查找字符
c
最后一次出现位置
string& replace(
int
pos,
int
n,
const
string& str);
//
替换从
pos
开始
n
个
字符为字符串
str
string& replace(
int
pos,
int
n,
const
char
* s);
//
替换从
pos
开始的
n
个字
符为字符串
s
string 比较操作
/*
compare
函数在
>
时返回
1
,
<
时返回
-1
,
==
时返回
0
。
比较区分大小写,比较时参考字典顺序,排越前面的越小。
大写的
A
比小写的
a
小。
*/
int
compare(
const
string &s)
const
;
//
与字符串
s
比较
int
compare(
const
char
*s)
const
;
//
与字符串
s
比较
string 子串
string substr(
int
pos =
0
,
int
n = npos)
const
;
//
返回由
pos
开始的
n
个字符
组成的字符串
string 插入和删除操作
string& insert(
int
pos,
const
char
* s);
//
插入字符串
string& insert(
int
pos,
const
string& str);
//
插入字符串
string& insert(
int
pos,
int
n,
char
c);
//
在指定位置插入
n
个字符
c
string& erase(
int
pos,
int
n = npos);
//
删除从
Pos
开始的
n
个字符
string 和 c-style 字符串转换
//string 转
char*
string str =
"itcast"
;
const
char
* cstr = str.c_str();
//char* 转
string
char
* s =
"itcast"
;
string str(s);
在 c++
中存在一个从
const char
到
string
的隐式类型转换,却不存在从一个
string
对象到
Cstring
的自动类型转换。对于
string
类型的字符串,可以通过
cstr()
函数
返回
string
对象对应的
C_string.
通常,程序员在整个程序中应坚持使用
string
类对象,直到必须将内容转化为
char
时才将其转换为
C_string.
提示
:
为了修改 string
字符串的内容,下标操作符
[]
和
at
都会返回字符的引用。但当字 符串的内存被重新分配之后,可能发生错误.
string s =
"abcdefg"
;
char
& a = s[
2
];
char
& b = s[
3
];
a =
'1'
;
b =
'2'
;
cout << s << endl;
cout << (
int
*)s.c_str() << endl;
s =
"pppppppppppppppppppppppp"
;
//a = '1';
//b = '2';
cout << s << endl;
cout << (
int
*)s.c_str() << endl;