今天总结一下c/c++字串的类别。
c
+
+
中,有两种字串
{
从
c
沿袭过来的
c
字串
c
+
+
的
s
t
l
资源提供的
s
t
r
i
n
g
类型的字串
c++中,有两种字串\left\{\begin{matrix} 从c沿袭过来的c字串 \\ c++的stl资源提供的string类型的字串 \end{matrix} \right.
c++中,有两种字串{从c沿袭过来的c字串c++的stl资源提供的string类型的字串?
c串
在存储结构中表现为字符序列,故常用字符数组表示c串。
c串以0作为字符序列的结束符。c串空间存储长度为字串长度加一。
c串数组表示
将字串放入字符数组,则多1
char buffer[7]={'h','e','l','l','o','!',0};
char buffer[7]={'h','e','l',0,'l','o','!'};
char c1[]={"hello!"};
char c2[]="hello!";
除了字符数组,其他类型的数组都不能被输出设备之间用数组名输出。
数组名作为变量也只有字符数组有意义,而且通过输出数组名来输出字串也要依靠字串本身的结束标记。
字符指针
若仅仅用于输出字串,就不需要将字串存入数组,用一个字符指针,指向字串的起始位置,因而直接把字串赋值给字符指针。
char* c="hello";
在c/c++中,如果在字符数组初始化定义中出现字串字面值,就将字面值填入字符数组中。
? 若字串字面值出现在其他场合,那么字面值就作为只读内存存储在独立的空间中。
指针的类型若是字符常量,则可以抑制指针对其进行修改访问:
const char* c="hello!";
事实上,所有字面值类型都是const的!
字串的输出,用字符数组的数组名也好,用字符指针也好,都是因为他们表示的是字串的起始地址。这些都在说明,数组名与指针肯定有关系
c串操作
字符数组能做到的
char a[10]="hello";
cin>>a;
cout<<a;
cout<<a[0];
字符数组不能做到的
代表字符地址的数组名和真是的字串还是有差别的。
比较大小,地址不能代替字符比较。
数组名牢牢的捆绑着数组所拥有的空间,把数组名看作变量,想要修改它的企图都是对数组空间的重组和破坏:
int a[10],b[10];
a=b;
int c1="hh";
int c2=c1;
c1="good";
字串查找操作涉及遍历所有数组元素,数组根本无法承担。
获取字串长度也不行,对于只能进行下标访问的数组显得无能为力,只能表示数组空间大小。
string串
string是一种数据类型,最初属于第三方提供的stl(标准模板库)资源。后来并入c++系统。使用string类型需要string头文件。
使用c库函数(就上面求长度啥的)使用string.h,或者c++头文件cstring。
string为字串类,他产生的string实体就是string串
初始化
{
s
t
r
i
n
g
s
1
(
"
h
e
l
l
o
"
;
)
/
/
s
t
r
i
n
g
(
s
t
r
[
,
起始位置,个数
]
s
t
r
i
n
g
s
2
=
s
1
;
s
t
r
i
n
g
s
3
=
"
h
e
l
l
o
"
;
初始化\left\{ \begin{matrix} string s1("hello";) //string(str[,起始位置,个数]\\ string s2=s1;\\ string s3="hello"; \end{matrix} \right.
初始化?
?
??strings1("hello";)//string(str[,起始位置,个数]strings2=s1;strings3="hello";? 它是容器类……
别的就不说了,网上都有,本文仅供区分。嘿嘿。
|