c++字符串
作者:互联网
#include <stdio.h> #include <string.h> #include <iostream> using namespace std; /* 1, C语言中字符用单引号,字符串用双引号 由于C语言中没有真正的字符串类型,可以通过字符数组表示字符串,因为它的元素地址是连续的,这就足够了 C语言中字符串的表示: 一是定义一个字符指针,并把该字符串首字符的地址传给他; char *name = "abc"; 二是定义一个字符数组,并把字符串存入该字符数组中。 char name[] = "abc"; 两种方式都行,但是第一种 name 是指针,代表一个地址,是不能改的 第二种是字符数组, name是可以改的 对于字符数组,其长度是固定的,其中任何一个数组元素都可以为 null 字符。因此,字符数组不一定是字符串。 对于字符串,它一定是字符数组,它是最后一个字符为 null 字符的字符数组。 对于字符指针,是把字符串首字符的地址传给他, C语言中操作字符串是通过它在内存中的存储单元的首地址进行的 2,C++ 提供了以下两种类型的字符串表示形式: C 风格字符串; C++ 引入的 string 类类型 string 3,C++中char是字符类型,是一种基本数据类型,而string是一个模板类,实例化的是对象,它的内部是封装了const char*类型 4,C语言中由于指针的灵活性,导致指针能代替数组使用,或者混合使用,这些导致了许多指针和数组的迷惑, C语言中规定数组代表数组所在内存位置的首地址,也是 str[0]的地址,即str = &str[0]; */ /* 2,转换 */ /* 3,常用方法 C++ 中有大量的函数用来操作以 null 结尾的字符串: strcpy(s1, s2); 复制字符串 s2 到字符串 s1。 strlen(s1); 返回字符串 s1 的长度。 strchr(s1, ch); 返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。 strstr(s1, s2); 返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。 C++ 标准库提供了 string 类类型,支持上述所有的操作,另外还增加了其他更多的功能。 */ int main(void) { /*字符数组赋初值*/ char cArr[] = { 'I','L','O','V','E','C' }; // 等价于 char cArr[6] = {'I','L','O','V','E','C'};这是字符数组,不是字符串 /*字符串赋初值---字符数组*/ char sArr[] = "ILOVEC"; // 编译时会自动在末尾增加一个null字符(也就是'\0')等价于char cArr[7] = {'I','L','O','V','E','C','\0'}. 等价于char sArr[7] = "ILOVEC"; /*字符串赋初值---字符指针*/ char *p = "ILOVEC"; // 字符指针,把字符串首字符的地址传给他,char *p 只是一个保存字符串首地址的指针变量 /*用sizeof()求长度*/ printf("cArr的长度=%d\n", sizeof(cArr)); // cArr的长度=6 printf("sArr的长度=%d\n", sizeof(sArr)); // sArr的长度=7 printf("p的长度=%d\n", sizeof(p)); // sArr的长度=8,这里得到是指针的长度 /*用strlen()求长度*/ printf("cArr的长度=%d\n", strlen(cArr)); // 随机值,因为这里不知道'/0'在哪里,所以我们这里的长度时要直到遇到‘/0’才会结束。 printf("sArr的长度=%d\n", strlen(sArr)); // sArr的长度=6 printf("p的长度=%d\n", strlen(p)); // sArr的长度=6,这里得到的是字符串长度 /*用printf的%s打印内容*/ printf("cArr的内容=%s\n", cArr); // 对字符数组,很显然使用 printf 的 %s 打印其内容是不合适的,因为不知道'/0'在哪里, printf("sArr的内容=%s\n", sArr); // 对于字符串 sArr,可以直接使用 printf 的 %s 打印其内容 printf("p的内容=%s\n", p); // 对于字符串 sArr,可以直接使用 printf 的 %s 打印其内容 return 0; } // 转换 int test() { // char[] 转 char*, 直接赋值 char str1[] = "abc"; char *str11 = str1; // char* 转 char[], 字符拷贝 const char * str = "abc"; char str2[10] = {0}; // 这里10个元素会被赋值为 null 字符(空字符,就是指'\0') // char *strncpy(char *dest, const char *src, size_t n) 把src所指向的字符串复制到dest,最多复制 n 个字符 strncpy(str2, str, strlen(str) + 1); // char*转string const char *str = "abcd"; string str1 = str; //赋值转换 string str2(str, str + strlen(str));//构造转换 //string转char*:赋值转换 string str44 = "abc"; char *str1 = const_cast<char *>(str44.c_str()); //const_cast是一种C++运算符,主要是用来去除复合类型中const和volatile属性 const char *str2 = str44.c_str(); // c_str()函数返回一个指向C字符串的指针常量,指向的内容是字符串对象的当前内容加上一个额外的终止字符(‘\ 0’) cout << "str1:" << str1 <<" " << "str2:" << str2 << endl; // char[]转string char str44[] = "abc"; string str1 = str44; // string转char[] string str55 = "12345"; char str21[5] = { 0 }; strncpy(str21, str55.c_str(), str55.length() + 1); return 0; }
标签:字符,c++,char,sArr,str,printf,字符串 来源: https://www.cnblogs.com/cc-world/p/16451973.html