string 与 char 字符串区别-1

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

原文地址:https://www.cnblogs.com/savennist/p/12770595.html