网站运营新手做,网页制作好的官网,免费算命,合肥公司门户网站制作文章目录 22. 字符串22.1. 字符数组 vs 字符指针 vs 常量字符指针 vs string22.2. strcpy vs sprintf vs memcpy22.3. strlen vs length vs size vs sizeof22.4. 字符串之间的转换22.5 其他数据类型与字符串之间的转换22.6 字符串分割 22. 字符串
22.1. 字符数组 vs 字符指针 … 文章目录 22. 字符串22.1. 字符数组 vs 字符指针 vs 常量字符指针 vs string22.2. strcpy vs sprintf vs memcpy22.3. strlen vs length vs size vs sizeof22.4. 字符串之间的转换22.5 其他数据类型与字符串之间的转换22.6 字符串分割 22. 字符串
22.1. 字符数组 vs 字符指针 vs 常量字符指针 vs string
字符数组 char[] 它将常量字符拷贝到自己的内存空间再进行读写操作。它的大小在编译时确定且固定大小。 字符指针 char* 它指向常量字符的内存空间不能修改字符串。只有为它动态分配内存才能修改。 常量字符指针 const char* 指向常量字符的指针不能修改字符串内容。【注意】 如果是 char* 或 char[] 隐式转换成 const char* 只是不能通过const char* 去修改可能存在安全隐患。示例如下。 string 是C标准字符串类封装了字符串的操作和管理。
int main() {char c1[] hello;c1[0] a;char* p1 hello;p1[0] a; //报错尝试修改常量字符char* p2 new char[10];strcpy(p2, hello);p2[0] a;const char* c p2; //char* 隐式转换成 const char*c[0] b; //报错尝试修改常量字符p2[0] b; cout c endl; //输出bellocout p2 endl; //输出bellodelete[] p2;return 0;
}
22.2. strcpy vs sprintf vs memcpy
相同都可以拷贝。区别 strcpy是字符串之间的拷贝。sprintf是其他数据类型到字符串的转化。memcpy是内存块间的拷贝。另外执行效率memcpy strcpy sprintf。示例如下。
struct Person
{char name[20];int age;
};int main() {char data[100];strcpy(data, hello);int num 1234;sprintf(data, %d, num);Person person { John,30 };memcpy(data, person, sizeof(Person));return 0;
}
22.3. strlen vs length vs size vs sizeof
相同都是获取大小。区别 strlen位于头文件 cstring 获取const char* 长度包括 char*char[]因为它们可以隐式转换成const char*。length获取string长度。size除了获取string长度还可以获取容器长度。sizeof获取对象或类型大小以字节为单位。示例如下。
int main() {const char* ctr Hello;cout strlen(ctr) endl; //输出5cout sizeof(ctr) endl; //输出4在32位环境下指针占4Bstring str Hello;cout str.length() endl; //输出5cout str.size() endl; //输出5length和size对string来说没区别return 0;
}22.4. 字符串之间的转换
string 转 const char*使用c_str()。const char* 转 char[]使用strcpy()。string 转 char[]使用strcpy(c_str())。const char*char*, char[] 转 string直接赋值。char*, char[] 转 const char*隐式转换。
22.5 其他数据类型与字符串之间的转换
const char* 转 int、long和double分别使用atoi、atol、atof。string 转 int、long、long long、float、double、long double分别使用stoi、stol、stoll、stof、stod、stold。数值类型 转 string使用to_string。
22.6 字符串分割
使用,分割字符串示例如下。
int main() {char str[] apple,banana,orange,grape;char* token strtok(str, ,);while (token ! nullptr) {printf(%s\n, token);token strtok(NULL, ,);}return 0;
}