C++中的string、char及几种类型的相互转换

一、标准库类型string

标准库类型string表示可变长的字符序列
1、定义和初始化string类型对象

string s1; // 空字符串
string s2("hello"); //字符串的初始化
string s3 = "hello"; //赋值操作
string s4(6, 'k'); //s2的内容是6个k
string s5(s2);

2、对象的直接初始化和拷贝
如果使用等号(=)初始化一个变量,实际是执行拷贝初始化,编译器把等号右边的值拷贝到新创建的对象中去。与之相反,如果不使用等号,则执行的是直接初始化。

3、输入字符串

string str1,str2;
cin>>str1; //遇到空格符就停止读入
getline(cin,str2); //一次读取一整行,遇到换行符就停止。

4、两个string对象相加

  • 当把string对象和字符字面值及字符串字面值混在一条语句中使用时,必须确保每个加法运算符的两侧的运算对象至少有一个是string
  • C++中的字符串字面值并不是标准库类型string的对象
string s1 = "hello";
string s2 = s1 + "Tom";  //正确,一个string对象和一个字面值相加
string s3 = "hello" + "Tom";  //错误,两个运算对象都不是string对象。
string s4 = s1 + "," + "Tom"; //正确,根据运算符优先级,相当于先s1+","结果为一个string对象,再和字面值"Tom"相加
string s5 = "hello" + "," + s1; //错误,根据优先级"hello"与","两个字面值将先进行相加。等价于("hello" + ",") + s1

5、遍历string中的每个字符

string str("hello world");
// 若要修改str中的字符,可以使用引用类型 auto &s
for (auto s : str)
	cout << s;

6、string中常用的函数

  • size() 和 length() 都表示字符串的长度
  • substr():获取子字符串
  • stoi():将字符转换成对应的整型数字
string str("0123456");
// 获取字符串str中从下标为2的位置str[2]开始的字符串:"23456"
string s1 = str.substr(2);
// 获取从第二个下标开始,长度为3的字符串
string s2 = str.substr(2, 3);

string str2("1,#,2,#,3,#,4,#");
str2 = str2.substr(4); //截取从下标为4开始的字符串:"2,#,3,#,4,#"
int i = stoi(str2); // 将该字符串的第一个字符转换成整型数字:i=2


二、char数组形式的字符串:字符数组

以字符数组形式表示的字符串必须以一个空字符 ‘\0’ 作为结束标志,但string类型的字符串结尾并没有空字符来作为结束标志
1、字符数组的初始化

char c1[] = { 'h','e','l','l','o','\0' }; //以单个元素添加的形式,其后面要手动添加空字符'\0';
char s[] = "hello"; //自动添加表示字符串结束的空字符 '\0'
char *s1 = new char[60];
strcpy(s1, "world"); //将字符串"world"拷贝到字符数组s1中
cout << s1 << endl; //输出拷贝到s1中的字符数组
cout << *s1 << " , " << s1[2] << endl; 

运行结果如下:
在这里插入图片描述
2、两个字符相减是将两个对应字符的 ASCll 值进行相减
(1)、将字符串 “6789”中的每个字符转换成对应的整型数字,最后存入整型数组中

int arr[4];
char cstr[] = "6789";
for (int i = 0; i < 4; ++i)
{
	//减去字符'0',就是减去其ASCAll值48
	arr[i] = cstr[i] - '0';
}


三、int和string类型的相互转换

1、int ———>>> string 类型
常用的几种方法如下:
(1)、使用 to_string() 函数来将数值转化为字符串,并返回对应的字符串。

int s = 10;
string s2;
s2 = to_string(s) + " is a num";

(2)、使用 stringstream 流

stringstream oss; //需要包含头文件sstream
int s = 10;
oss << s;
string st = oss.str();
st += " is a num.";
//或者使用如下方法:stringstream可以以一种类型的数据输入,另一种类型的数据输出。如果重复使用的话,需要clear()一下。
int num1 = 2345, num2 = 7895;
string str;
stringstream ss;
ss << num1;
ss >> str;
cout << str << endl;
ss.clear(); //重复使用时,必须要clear()
ss << num2;
ss >> str;
cout << str << endl;

2、string ————>>> int
(1)、将string字符串(该字符串中的所有字符都应该是数字)转换成一个整数

// 方法一:使用 stoi() 函数
string str1 = "12345";
int strToInt1 = stoi(str1); 

// 方法二:使用stringstream 来进行,头文件中要包含#include<sstream>
string str1 = "12345";
int res = 0;
stringstream ss;
ss << str1;
ss >> res;
cout << res << endl;

2、将字符串中的每个元素由字符转换成对应的整数,并以整型数组的形式进行保存

string str1 = "12345";
int arr1[5];
for (int i = 0; i < 5; ++i)
{
	arr1[i] = str1[i] - '0';
}

四、char 和int 相互转化

1、char————>>> int
(1)、将字符数组转换成一个整数1234

char c1[] = "1234";
int charToInt = 0;
stringstream ss;
ss << c1;
ss >> charToInt;

(2)、将字符数组中的每个字符转换成对应的整数

// 将字符数组转换成一个整数1234
char c1[] = "1234";
int arr[4];
for (int i = 0; i < 4; ++i)
{
	arr[i] = c1[i] - '0';
}

2、int ————>>> char

//将整数数5643转换成字符"5643"
int num1 = 5643;
char str[5];
stringstream ss;
ss << num1;
ss >> str;


五、char 和 string类型的相互转换

1、string ————>>> char
不能直接用string对象来初始化指向字符的指针

string str("hello");
char *s1=str;      //错误,不能直接用string对象来初始化char*
// c_str()返回一个 const char* 类型的指针
const char *s2=str.c_str(); //正确,将string对象转换成C中字符串的样式

c_str()函数返回一个指向C字符串的常量指针(const char*), 内容与string字符串相同
C++中 c_str( )主要用法就是这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。

c_str() 以 char* 形式传回 string 内含字符串。

char c[20]; 
string s="1234"; // s.c_str()将string对象转换成C形式的字符数组
strcpy(c,s.c_str()); 

这样才不会出错,c_str()返回的是一个临时指针,不能对其进行操作。

2、char —————>>> string
(1)、当char字符串前没有修饰符,如signedunsigned,转换方式如下:
因为string可以向上兼容char类型,所以在任何出现string类型对象的字符串的地方,都可以用以空字符结束的字符数组来代替。

//可以用char类型的字符串直接初始化string类型字符串
char cstr[] = "hello just test";
char *cstr2="hello just a test";
string str = cstr;
string str2=cstr2;

(2)、当char字符串前有signedunsigned修饰符时,以上的方式将不能使用。具体转换方式如下:

string str;
unsigned char ch[] = "hello";
str = (char*)ch; //字符串前要加强制转换字符

【在进行字符串处理时,可以先将char类型的字符串转换成string类型,再进行其他的处理。】


六、字符和对应的 ASCll 码/数字相互转换

int a1 = 36;
// a所对应的ASCII值会直接转换成字符('$'),并赋给s1;
char s1 = a1;

char s2 = 'd';
// 求出对应字符的ASCII值,并赋给整型变量
int a2(s2), a3('f');

//可以使用char来保存int类型的值。
int length = 10;
unsigned char len = length; // 在此 (int)len 时会直接获取到其整数值,相当于用一个字符保存了整数的值

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值