字符数组:存储字符的数组
字符串 :是使用最频繁的字符数组,是一个特殊的字符数组
C++中并没有专门的字符串的类型,一个字符串实际上就是一个字符数组,与普通字符数组不同的是,字符串的结尾有一个字符\0,表示字符串的结束。
char 可以定义字符数组,也可以定义字符串
char 定义的字符数组
char b[]={'h','e','l','l','o'};
char定义字符串
字符串的优势在于输入、输出和赋初值,输入输出不需要使用循坏。字符数组需要用循环依次输出每个字符。
char b[]="hello";
char *p = b;
cout << b;
cout<< *p;
字符数组和字符串的区别
C++中,字符数组和字符串都是通过char关键字来定义的,但二者不同,显著的区别就是字符串的长度是字符数目加1,因为包含了\0结束符,而字符数组的长度就是字符的数目。对于字符数组可以通过sizeof求出其长度,但是对于字符串是其长度加上1。因此这个长度没有意义,为此C++可以用strlen求出字符串的有效内容的长度(不含字符串结束标识\0)。
指针与字符串、指针与字符数组
指针指向字符数组
char b[] = { 'h','e','l','l','o' };
char *pchar = b;
cout << *pchar;
cout << b[0];
//以下语句实现用指针输出hello。
for (size_t i = 0; i < 5; i++)
{
cout << *pchar;
pchar++;
}
指针指向字符串
char定义的字符串
用char定义一个指针,并指向了char定义的字符串,那么用指针变量p 和*p输出的结果不一样,请看一下两种情况。 具体原因我也不知道。
方式1
char str[] = "we are poor students";
cout<<str<<endl;
char *p = str;
while (*p != '\0')
{
cout << *p;
p++;
}
方式二
char *p = str;
while (*p != '\0')
{
cout << p<<endl;
p++;
}
以上语句输出的结果是:
we are poor students
we are poor students
e are poor students
are poor students
are poor students
re poor students
e poor students
poor students
poor students
oor students
or students
r students
students
students
tudents
udents
dents
ents
nts
ts
s
string定义的字符串
这里需要特别注意的是string并不是一个关键字,而是一个类。
下面代码的指针指向的是对象,而不是string中的第一个字符。
string str="hello world";
string *p1 = &str;
cout << str << "," << *p1;
用指针遍历 每个字符
- 用C++的迭代器
string str1 = "we are poor students";
for (string::iterator p1 = str1.begin(); p1 !=str1.end(); p1++)
{
cout << *p1 ;
}
- 用
c_str() (Get C string equivalent)函数转化为c类型的string,如下代码所示:
string str1 = "we are poor students";
const char *p = str1.c_str();
for (size_t i = 0; i < str1.size(); i++)
{
cout << *(p + i);
}