zoukankan      html  css  js  c++  java
  • char*、string、CString各种字符串之间转换

    参考博客:

    http://blog.csdn.net/luoweifu/article/details/20242307

    http://blog.csdn.net/luoweifu/article/details/20232379

     

    <string> <string.h><cstring>的区别

    <string.h>

    <string.h>是C版本的头文件,包含比如strcpy、strcat之类的字符串处理函数。

    <cstring>

    在C++标准化(1998年)过程中,为了兼容以前,标准化组织将所有这些文件都进行了新的定义,加入到了标准库中,加入后的文件名就新增了一个"c"前缀并且去掉了.h的后缀名,所以string.h头文件成了cstring头文件。但是其实现却是相同的或是兼容以前的,这就是<cstring>的来源,不要觉得又多了一个东西。相当于标准库组织给它盖了个章,说“你也是我的标准程序库的一份子了”。

    <string>

    <string>是C++标准定义的头文件,它定义了一个string的字符串类,里面包含了string类的各种操作,如s.size(), s.erase(), s.insert()等。但<string>又包含了老的C版本的字符串操作如strcpy、strcat等,这就相当于,在<string>的文件中除了定义自己的string类之外,还加了一个#include<string.h>一句包含了C版本的字符串操作。

    没有<cstring.h>这样的头文件。

    string:

    string是C++标准库(STL)中的类型,它是定义的一个类,定义在<string>头文件中。里面包含了对字符串的各种常用操作,它较char*的优势是内容可以动态拓展,以及对字符串操作的方便快捷,用+号进行字符串的连接是最常用的操作。

    CString

    CString常用于MFC编程中,是属于MFC的类,如从对话框中利用GetWindowText得到的字符串就是CString类型,CString定义在<afx.h>头文件中。CString(typedef CStringT> CString)为Visual C++中最常用的字符串类,继承自CSimpleStringT类,主要应用在MFC和ATL编程中,所以使用CString时要包含afx.h文件#include <afx.h>。

     

    char*

    char*是一个指向字符的指针,是一个内置类型。可以指向一个字符,也可以表示字符数组的首地址(首字符的地址)。我们更多的时候是用的它的第二的功能,来表示一个字符串,功能与字符串数组char ch[n]一样,表示字符串时,最后有一个 ''结束符作为字符串的结束标志。

    Char* 转 CString

    char *ch = "char pointer to CString";

        CString cStr1 = ch;

        CString cStr2 = CString(ch);

     

     

     

    CString 转 Char*   

             CString cstr = "CString to char point";

        char* chs = cstr.GetBuffer(0);//此方法在unicode下编译不通过

     

    char* 转 string

        char * ch = "char point to string";

        string s1 = ch;   //直接初始化或赋值

        string s2(ch), s3;

        s3 = string(ch);

     

    string 转 char*

        string str = string("string to char point");

        /*************************************************************************

        其实没有很大的必要将string转换成char*,因为string可以直接当成字符数组来使用,

        即通过下标来访问字符元素,如str[1]表示第1个字符't'

        **************************************************************************/

        const char *ch1 = str.c_str();

     

    string 转 CString

        string s1 = "string1 to CString";

        string s2 = "string2 to CString";

        string s3 = "string3 to CString";

        CString cstr(s1.c_str());

        CString cstr2, cstr3

        //c_str()和data()区别是:前者返回带'/0'的字符串,后者则返回不带'/0'的字符串.

        cstr2.Format("%s", s2.c_str());    // string to CString

        cstr3.Format("%s", s3.data()); // string to CString

       

     

    CString 转 string

        CString cstr3 = "CString to string3";

        CString cstr4 = "CString to string4";

        string str;

        str = cstr3.GetBuffer(0);    //此方法在unicode下编译不通过

        str = LPCSTR(cstr4);         //此方法在unicode下编译不通过

     

    //注解:以上测试都是在多字节编码下,若是在Unicode编码下则CString 相当于双字(宽字节WCHAR和wstring)

  • 相关阅读:
    7.21 高博教育 数组 内存
    【基础扎实】Python操作Excel三模块
    PAT 甲级 1012 The Best Rank
    PAT 甲级 1011  World Cup Betting
    PAT 甲级 1010 Radix
    链式线性表——实验及提升训练
    循环程序设计能力自测
    链表应用能力自测
    PAT 甲级 1009 Product of Polynomials
    1008 Elevator (20分)
  • 原文地址:https://www.cnblogs.com/HsinTsao/p/7105503.html
Copyright © 2011-2022 走看看