char 是C++内置数组类型
string是标准库中定义的类
char 定义的数组仅仅是储存字符串,c库中有一系列操作字符串的函数。
sting是类,它包含一个可变长度的char 数组,封装了常用的字符串操作函数。
char字符数组存放字符串
用字符数组存放 | 用字符指针管理串 |
---|---|
char str1[ ]=“How are you”; | char *str2=“Fine”; |
一般我们定义指针变量int *p=&a;
、。虽然char *str2="Fine"
但这并不意味着“fine"就是一个指针,实际上我们的这一指令,编译器在幕后为我们做了很多,
1.首先常量区分配一个字符数组,(可以看成匿名数组)
2.然后将”Fine"字符串(包括’\0’)拷贝到此数组,
3.然后返回数组首地址,将此地址赋值给字符指针变量str2; 这与C语言没有字符串类型有关;
通过下面一个例子来验证
#include<iostream>
using namespace std;
int main(){
char str1[]="How";
char *str2="Fine";
cout<<str1[0]<<" "<<str2[0]<<endl;
cout<<str1<<str2<<endl;
cout<<strlen(str1)<<endl;
cout<<strlen(str2)<<endl;
}
运行结果
strlen( )只计算有效字符个数,空字符不包括在内
strlen(Name);
字符串结束标志’\0’
cin.get( )或者整行输入gets( Name) 可以输入空格
字符串拷贝函数strcpy( )
格式;strcpy(字符串数组1;字符串2)
将字符串2,拷贝到字符数组1中去
不能使用赋值语句为一个字符数组赋值*
string是c++定义的一种类
string s | 默认构造空串 |
---|---|
string s2(s1) | 由s1复制构造s2 |
string s( “hello”) | 以hello为初值构造s |
s.size() | 返回串长 |
s1=s2 | 把s1赋值给s2 |
s.append(ha) | 把ha追加到s 之后 |
s1+s2 | 把s2连接到s1 |
s.clear( ) | 删除s的所有字符 |
string name[5]={"Li Hua","He Xiao","Zhang Li","Sun Fei","Chen Bao"};
string 还可以以char [ ]或char*为子串
例;
#include<iostream>
#include<cstring>
using namespace std;
int main(){
char d[]="joker"; //定义char 类字符串
string s(d); //以 char[]为子串创建s
cout<<s;}
运行如下;
因为string定义的s,本身就是字符串类型;也不可以用cin>>s;
来赋值;
把string对象转化为c字符串(char[ ]、char*)
#include<iostream>
#include<cstring>
using namespace std;
int main(){
string s("string object");
int len=s.lenth(); //获得长度
char *ptr1=new char[len+1]; //开辟空间
strcpy_s(ptr1,len+1,s.data()); //将s.data复制到ptr1
cout<<"sting is;"<<s<<endl;
cout<<"ptr1 is ;"<<ptr1;
delete []ptr1;
*strcpy_s(Des,Dessize,Src)
若Des为字符指针参数,之后Des长度,要复制的字符串