尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

C++之string和char的使用及区别

C++之string和char的使用及区别 一、概念Char在C中char是定义一个字符存储的是一个字符占一个字节,如’a’C中char是字符类型是一种基本数据类型Stringstring是一个模板类实例化的是对象它的内部是封装了const char*类型是一个常量指针指向可以改变但是指向的值不能改变。字符串字符串是使用’\0’终止的一维字符数组字符串的长度为字符个数加1’\0’也占一个长度。在C中字符串有两种一种是字符串char[]即C风格的字符串一种是封装好的字符串类String。二、操作函数strcpy(s1,s2) 复制字符串s2到s1s2复制到了最前面strcat(s1,s2) 连接字符串s2到字符串s1的末尾strlen(s1) 返回字符串s1的长度strcmp(s1,s2) 比较字符串的大小若s1s2返回0若s1 s2 返回正数若s1 s2返回负数strchr(s1,ch) 返回一个指针指向s1中字符ch第一次出现的位置strstr(s1,s2) 返回一个指针指向s1中字符串s2第一次出现的位置三、例子1、字符串定义例子12chargreet[] hello;//这两行语句等价chargreet[6] {h,e,l,l,o,\0};2、定义string及一些基本操作123456string s1 hello;string s2 world;string s3;s3 s1;//复制s3 s1 s2;//连接两个字符串intlen s3.size();//获取字符串的长度3、string中的每一个字符使用单引号是char类型1234567string s hell0;charch s[0];//hcharchabc;coutch;//打印c//只打印一个c为什么只打印一个c//abc是一个字符串赋值给一个字符时会取字符串中最低的位数赋值。4、字符串输出12345string a;printf(%s,a);//输出乱码对于string这类,要用一下加.c_str()的方式这个函数是返回字符串string的首地址因为%s要的是char*,但是string只是字符串要通过函数名来返回其首地址。string a;printf(%s,a.c_str());四、Char和string异同在c中C风格的字符串和String类的比较可以看下面这张图char是一个字符型指针可以指向一个字符数组与string不太相同的是字符数组存储的字符串必须以’\0’结尾代表结束符号而string并不一定以’\0’结束。string的内存管理是由系统处理的除非内存池用完否则基本上不会出现什么内存问题。而char的内存需要自己手动管理了很容易出现内存问题。五、char*和string的互相转化如果要将string直接转换为const char*类型可以使用两个函数。1、c_str()12string sabcd;constchar*chs.c_str();c_str()函数返回一个指向正规C字符串的指针内容与string相同因为C本身没有string类。但是上面这种用法很不安全因为ch最后指向的内容是垃圾值s对象被析构了。而且c_str()返回的是一个临时指针不能对其进行操作。2、strcpy()通过strcpy函数来进行转换是安全的123charch[20];string sabcd;strcpy(ch,s.c_str());3、data()12string sabcd;constchar*chs.data();那c_str()和data()有什么区别呢c_str()会在数据的末尾添加’\0’结束符多数用于使用字符串场合。而data()函数不会添加’\0’结束符。4、如果要转换为char而非const char类型12345string sabcd;char*ch;ch(char*)malloc((s.length())*sizeof(char));s.copy(ch,s.length(),0);//把当前串中以0开始的s.length()个字符拷贝到以ch为起始位置的字符数组中返回实际拷贝的数目coutch;5、通过str[i]的方式取值的类型123string s abcd;cout typeid(s[1]).name() endl;//char我测试输出 c.六、总结以上为个人经验希望能给大家一个参考
返回列表