string,char ,char * ,char [] 之间的赋值

string与char ,char * ,char [] 之间的赋值

前言

一、string 对象与 char [] 间的赋值
二、string 对象与 char 间的赋值
三、string 对象与 char * 间的赋值


一、string 对象 与 char [] 间的赋值

1.用字符数组对string 对象赋值:

	char c[10]="asdfgh";
	string s;
	s=c;
	cout<<s<<endl; //输出asdfgh

2.用string 对象对字符数组赋值:

    string s="asdfgh";
	char c[10];
	strcpy(c,s.c_str());//复制s的内容到c中
	cout<<c<<endl;  //输出asdfgh

在这种情况下,要调用c_str成员函数,将s的内容复制到c中

二、string 对象 与 char 间的赋值

1.用 字符 对string 对象赋值:

    char c='w';
	string s;
	s=c;
	cout<<s<<endl;

注意:不能像下面一样写

	char c='w';
	string s=c;
	cout<<s<<endl;

原因:string s=c;这条语句是初始化语句,而不是赋值语句; 而初始化语句不能用字符对string对象初始化,要用字符串。
下面介绍string对象初始化的几种方式

	//**初始化的几种方式**//
	string s1("Hello");
	cout <<"s1= "<< s1 << endl;
	string s2(5, 'A');		//5个连续的A
	cout << "s2= "<<s2 << endl;
	string s3 = "World";
	cout << "s3= " << s3<<endl;
	string s4;
	s4 = 'A';          //赋值语句 
	//string s4='A';   //该语句是错误的
	cout << "s4= " << s4 << endl;
	string s5(s1);     //用一个对象初始化同类的对象 
	cout << "s5= " << s5 << endl;

2.用 string 对象 对 char 类型 赋值:

    string s="asdfgh";
	char c;
	c=s[3];
	cout<<c<<endl;      //输出f;

不能写c=s,因为该string对象的内容是字符串,而char类型是字符类型。

三、string 对象 与 char *间的赋值

1.用 char *对 string 对象 赋值:

    char *p="asdfgh";
	string s;
	s=p;
	cout<<s<<endl;  //输出asdfgh

注释:指针p指向字符串的首地址,而s=p则是将字符串 的首地址给了string 对象s,这个与上面的用char[]对 string 对象赋值类似。

2.用 string 对象对 char * 赋值:

    string s="asdfgh";
	char *p=new char[s.size()];//动态分配一个数组,并将该数组的首地址给指针p
    strcpy(p,s.c_str());
	cout<<p<<endl;    //输出asdfgh

总结

以上就是个人的总结了,有不正确的地方欢迎指正。

  • 17
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
将一个 `std::string` 赋值给 `unsigned char*` 可以通过以下两种方法实现: 方法一:使用 `strcpy` 函数 ```c++ #include <iostream> #include <cstring> int main() { std::string str = "Hello, world!"; const char* cstr = str.c_str(); // 获取 std::string 对应的 const char* 指针 unsigned char* data = new unsigned char[str.size() + 1]; // 动态分配内存,注意要加一位存储字符串结束符 '\0' strcpy((char*)data, cstr); // 将 const char* 拷贝到 unsigned char* 中 // 其它操作 delete[] data; // 释放内存 return 0; } ``` 在这个例子中,我们首先定义了一个 `std::string` 对象 `str`,然后通过 `c_str()` 函数获取其对应的 `const char*` 指针 `cstr`。接着,我们动态分配了一个 `unsigned char*` 数组 `data`,并使用 `strcpy` 函数将 `cstr` 拷贝到 `data` 中。最后,我们进行了一些其它的操作,并在最后释放了内存。 方法二:使用 `std::copy` 算法 ```c++ #include <iostream> #include <cstring> #include <algorithm> int main() { std::string str = "Hello, world!"; const char* cstr = str.c_str(); // 获取 std::string 对应的 const char* 指针 unsigned char* data = new unsigned char[str.size() + 1]; // 动态分配内存,注意要加一位存储字符串结束符 '\0' std::copy(cstr, cstr + str.size() + 1, data); // 使用 std::copy 算法将 const char* 拷贝到 unsigned char* 中 // 其它操作 delete[] data; // 释放内存 return 0; } ``` 在这个例子中,我们使用了 `std::copy` 算法将 `const char*` 指针 `cstr` 中的字符拷贝到了 `unsigned char*` 数组 `data` 中。注意,这里需要将 `cstr` 的结束符也一并拷贝到 `data` 中,因此在 `std::copy` 函数的第三个参数中需要加一。然后,我们进行了一些其它的操作,并在最后释放了内存。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值