string 与 char 字符串区别-1
注意:这篇文章主要记录了有关string与char在使用中的几种情况。
接受字符串常量
在一般使用中向函数参数列表内直接写入字符串常量时,可以选择char与string接收
char*指针
内容输出
void display(const char* aim)
{
cout<<aim<<endl;
}
/*
void display(char* aim)
{//此时没有const修饰,会有警告
cout<<aim<<endl;
}
*/
int main()
{
display("cycycycysdig");
return 0;
}
//输出:cycycycysdig
长度计算
void display(const char* aim)
{
int lenth=strlen(aim);
cout<<lenth<<endl;
}
int main()
{
display("cycycycysdig");
return 0;
}
//输出:12
内容操作(这里尝试对字符串复制)
void display(const char* aim)
{
int lenth=strlen(aim);
char temp[lenth+1];//要多一个位置
temp[lenth]=' ';//这一句是必不可少的
memcpy(temp,aim,sizeof(char)*lenth);//直接对区间内存复制
cout<<temp<<endl;
}
int main()
{
display("cycycycysdig");
return 0;
}
//输出:cycycycysdig
string容器
string不仅仅操作方便,而且对C风格的字符串代码具有良好的适配
直接string接收
void display(string aim)
{
//之后的操作就十分方便了
int lenth=aim.size();//字符串长度
cout<<lenth<<endl;
}
int main()
{
display("cycycycysdig");
return 0;
}
//输出:12
间接string接收
void display(const char* aim)
{
string psd=aim;
//直接接收了来自char指针字符串
cout<<psd<<endl;
}
int main()
{
display("cycycycysdig");
return 0;
}
//输出:cycycycysdig
string对char的良好的兼容性
注意,string对char具有良好的兼容特性,这也说明了char对string的完全不兼容
string转char字符串
string的c_str()方法是完成这个功能的主要方法.但是有几点需要注意.
int main()
{
string aim;
aim="helloworld";
//
char* temp= new char[aim.size()+1];
strcpy(temp,aim.c_str());
cout<<temp<<endl;
return 0;
}
能够看到,c_str()方法产生的以' '结尾的字符串会随着析构函数的调用而被回收。所以,一个正确的保留字符串的方案就是提前创建好合适长度的C字符串并使strcpy()函数复制得到备份。另外,string容器中还有其它的具有类似功能的方法:copy(),data().详细请问度娘.
string在运算符上对char的兼容
int main()
{
string aim;
aim+="hello";
cout<<aim<<endl;//输出:hello
aim+='w';
aim+='o';
cout<<aim<<endl;//输出:hellowo
aim='q';
cout<<aim<<endl;//输出:q
aim="s";
cout<<aim<<endl;//输出:s
return 0;
}
这里能够反映出:string在+=运算符与=运算符上对常量字符与常量字符串的兼容性
int main()
{
string aim;
char c[]="ddds";
aim+=c;
cout<<aim<<endl;//输出:ddds
//
const char ch[]="asdgafg";
aim+=ch;
cout<<aim<<endl;//输出:dddsasdgafg
return 0;
}
一样的,对char字符串也很友好
OK