【C++】对于string的补充(成员函数c_str()、大小写转换、字符串和实数之间的相互转换)

前言

本篇文章记录的是一些关于string的补充说明

string与const char*之间的相互转换

const char* 转换成string

在C++中存在着从const char到string的隐式类型转换,换句话说,如果一个函数的参数类型是string类,直接传入const char类型的参数是没问题的

const char* cstr = "demo";
string str(cstr);

string与const char*的转换

在传入参数时i,有时我们传入string在编译时是会报错的,所以我们就需要传入const char* 类型

我们可以使用成员函数c_str(),来返回string对应的char数组

string str = "demo";
const char* cstr = str.c_str();

并且,在进行文件读写的时候,使用const char* 比使用string更安全
因为,string是会自动分配内存的,其内部的存储方式是不可见的
而const char*类型是整存整取的,或者也可以自己手动存入每一部分

注意

为了修改string字符串的内容,下标访问操作符[]和函数at都会返回字符串中某个字符的引用,但当字符串的内存被重新分配之后,可能会发生错误

此处给出一个例子(string内部的内存分配机制)方便理解:
字符串str中有十个元素,当我想往里面复制11个元素时,先复制了10个元素,在放第十一个元素的时候,原字符串不够放,那就会在堆区的另一个地方找一个更大的位置,比如找了一个能存放20个元素的位置,
首先,会之前存储的10个元素拷贝到新的空间里,之后再将第11个元素存储到后面,最后将之前存储10个元素的空间释放掉

那么,当我想通过之前的引用找到原来对应的字符时,就会发生未知的错误

大小写转换

在C语言中,我们只能通过循环来改变每个字符,利用ASCII码值或者toupper/tolower函数将其转换成大写或小写

而使用STL的话,一行就能解决这个问题
在STL算法库中,已经将这种遍历修改的过程进行了封装
我们可以直接复用:

transform(str.begin, str.end(), str.begin(), toupper);
//字符串转大写

transform(str.begin(), str.end(), str.begin(), tolower);
//字符串转小写

这里面的算法就是transform算法,包含四个参数
前两个参数是源容器的首未迭代器
第三个参数是目标容器的首迭代器
第四个参数是函数指针,也就是要执行的操作

之后会有对于迭代器的解释和学习,在这里会用就行

字符串和数字之间的转换

实数转字符串

在C++11新标准中,提供了全局函数std::to_string
可以将类型转换成string类型

下面给出一些例子
将带符号 / 不带符号整数和实数转换成字符串

string to_string(int val);

string to_string(long val);

string to_string(long long val);

string to_string(unsigned int val);

string to_string(unsigned long val);

string to_string(unsigned long long val);

string to_string(float val);

string to_string(double val);

string to_string(long double val);

字符串转实数

int stoi(const string& str, size_t* idx = 0; int base = 10);

long stol(const string& str, size_t* idx = 0, int base = 10);

long long stoll(const string& str, size_t* idx = 0, int base = 10);

补充说明

1.

idx返回字符串中第一个非数字的位置,即数值部分的结束位置

2.

base为进制,10就是10进制,8就是8进制

3.

该组函数会自动保留符号和自动去除前导0

C风格字符数组转换成实数

在C语言中,也提供了一些函数来帮助我们将字符数组转换成实数

int atoi(const char* str);

long atol(const char* str);

long longstoll(const char* str);

double atof(const char* str);

注意:
atof函数中的f指的是浮点数(包含float、double、long double类型),atof函数的返回类型是double

结语

关于string的补充说明到这里就结束了,
之后我会出一些刷题的笔记以及C++相关知识的学习和介绍

我们下篇文章见~

你可能感兴趣的:(C++知识点,c++,c语言,java)