• MFC之CString操作1


    本文章参考:CString

    CString对象可以被认为是字符数组.CString看作实际的字符串,而不是指向字符串的指针.
    CString
    位于头文件afx.h中。
    CString
    对象的Format()方法,完胜sprintf()函数或wsprintf()函数格式化字符串操作

    前话:_T()宏与Unicode意识

    CString s; s.Format(_T("The total is %d"),total);

    CString s;
     s.Format(_T("%d"),total);//把一个整数转化成CString类型
    //
    Unicode环境下,它的效果就相当于:s.Format(L"%d",total);
    //
    此时,不要用 sizeof() 操作符来获得字符串的长度,因为在Unicode环境下就会有2倍的误差。我们可以用一些方法来隐藏Unicode的一些细节,比如当需要获得字符长度的时候,用一个叫做DIM的宏,定义在dim.h文件中:
      #define DIM(x) (sizeof((x)) / sizeof((x)[0]))
    区分真实字符长度 ||  字节长度。

    1)CString类的构造函数

    CString类有很多构造函数,这里只介绍几个比较常用的:
    CString(const CString& stringSrc);
    将一个已经存在的CString对象stringSrc的内容拷贝到该CString对象。例如:
    CString str1(_T(jizhuomi)); //
    将常量字符串拷贝到str1
    CString str2(str1
    ); // str1的内容拷贝到str2
    CString(LPCTSTR lpch,int nLength);
    将字符串lpch中的前nLength个字符拷贝到该CString对象。例如:
    CString str(_T("wwwjizhuomi"),3
    ); // 构造的字符串对象内容为"www"
    CString(TCHAR ch,int nLength = 1
    );
    使用此函数构造的CString对象中将含有nLength个重复的ch字符。例如:
    CString str(_T('w'),3
    ); // str"www"

    2)CString类的大小写转换及顺序转换函数

    CString& MakeLower(); //将字符串中的所有大写字符转换为小写字符。
    CString& MakeUpper(); //
    将字符串中的所有小写字符转换为大写字符。
    CString& MakeReverse(); //
    将字符串中所有字符的顺序颠倒。
    例如:
      CString str(_T("JiZhuoMi"));
      str.MakeLower(); // str"jizhuomi"
      str.MakeUpper(); // str"JIZHUOMI"
      str.MakeReverse(); // str"IMOUHZIJ"

    3)CString对象的连接

    多个CString对象的连接可以通过重载运算符++=实现。例如:
    CString str(_T("jizhuomi")); // str
    内容为"jizhuomi"
    str = _T("www") + str + _T("-"); // str
    "wwwjizhuomi-"
    str += _T("com"); // str
    wwwjizhuomi-com
    比较:

    CString gray("Gray");
    CString cat("Cat");
    CString graycat = gray + cat;
    //then graycat="GrayCat"

    char gray[] = "Gray";
    char cat[] = "Cat";
    char * graycat =(char*)malloc(strlen(gray) + strlen(cat) + 1);
    strcpy(graycat,gray);
    strcat(graycat,cat);

    4)CString对象的比较

    CString对象的比较可以通过==、!=<;、>;、<=>=等重载运算符实现,也可以使用CompareCompareNoCase成员函数实现。
    int Compare(PCXSTR psz) const;
    将该CString对象与psz字符串比较,如果相等则返回0,如果小于psz则返回值小于0,如果大于psz则返回值大于0
    int CompareNoCase(PCXSTR psz) const throw();
    此函数与Compare功能类似,只是不区分大小写。
    例如:
    CString str1 = _T("JiZhuoMi");
    CString str2 = _T("jizhuomi");
    if (str1 == str2

    {
      // 因为str1str2不相等,所以不执行下面的代码
      ...
    }
    if (0 == str1.CompareNoCase(str2
    ))
    {
      // 因为不区分大小写比较时,CompareNoCase函数返回0,所以执行下面的代码
      ...
    }

    5)CString对象字符串的提取操作

    CString Left(int nCount) const;  //提取该字符串左边nCount个字符的子字符串
    CString Right(int nCount) const;
      //提取该字符串右边nCount个字符的子字符串
    CString Mid(int iFirst,int nCount) const;
      //提取该字符串中以索引iFirst位置开始的nCount个字符组成的子字符串
    CString Mid(int iFirst) const;
      //提取该字符串中以索引iFirst位置开始直至字符串结尾的子字符串
    例如:
      CString str1 = _T("jizhuomi");
      CString str2 = str1.Left⑶; // str2"jiz"
      str2 = str1.Right⑵; // str2"mi"
      str2 = str1.Mid1,3); // str2"izh"
      str2 = str1.Mid⑸; // str2"omi"

    6)CString对象字符串的查找操作(返回出现位置)

    int Find(PCXSTR pszSub,int iStart=0) const throw();
    int Find(XCHAR ch,int iStart=0) const throw();
    CString对象字符串的iStart索引位置开始,查找子字符串pszSub或字符ch第一次出现的位置,如果没有找到则返回-1
    int FindOneOf(PCXSTR pszCharSet) const throw();
    查找pszCharSet字符串中的任意字符,返回第一次出现的位置,找不到则返回-1
    int ReverseFind(XCHAR ch) const throw();
    从字符串末尾开始查找指定的字符ch,返回其位置,找不到则返回-1。这里要注意,尽管是从后向前查找,但是位置的索引还是要从开始算起。
      CString str = _T("jizhuomi");
      int nIndex1 = str.Find(_T("zh")); // nIndex1的值为2
      int nIndex2 = str.FindOneOf(_T("mui")); // nIndex2的值为1
      int nIndex3 = str.ReverseFind(_T('i')); // nIndex3的值为7

    7)CString类对象字符串的替换与删除

    int Replace(PCXSTR pszOld,PCXSTR pszNew);
    pszNew字符串替换pszOld字符串,(Replace新替老,有多少换多少)返回替换的字符个数。
    int Replace(XCHAR chOld,XCHAR chNew);
    chNew字符替换chOld字符,(新替老,有多少换多少)返回替换的字符个数。
    int Delete(int iIndex,int nCount = 1);
    从字符串中删除iIndex位置开始的nCount个字符,返回(Delete剩余长度)删除操作后的字符串的长度。
    int Remove(XCHAR chRemove);
    删除字符串中的所有由chRemove指定的字符,返回(Remove去掉个数)删除的字符个数。
    例如:
      CString str = _T("jizhuomi");
      int n1 = str.Replace(_T('i'),_T('j')); // str"jjzhuomj"n12 --替返【替个数】
      int n2 = str.Delete1,2); // str"jhuomj"n26 -- 删返【剩个数】
      int n3 = str.Remove(_T('j')); // str"ihuom"n31 -- 移返【移个数】

    8)CString类的格式化字符串方法

    使用CString类的Format成员函数可以将intshortlongfloatdouble等数据类型格式化为字符串对象。

    void __cdecl Format(PCXSTR pszFormat,[,argument]...);

    参数pszFormat为格式控制字符串;参数argument可选,为要格式化的数据,一般每个argumentpszFormat中都有对应的表示其类型的子字符串,int型的argument对应的应该是"%d"float型的应对应"%f",等等。

    例如:

      CString str;

      int a = 1;

      float b = 2.3f;

      str.Format(_T("a=%d,b=%f"),a,b); // str"a=1,b=2.300000"

  • 相关阅读:
    埋点笔记整理02
    数据可视化笔记整理02
    埋点笔记整理01
    数据可视化笔记整理01
    魔力Python——我踩过的各种坑
    我们的竞争对手在看向哪里---对勺海公众号的挖掘与细分
    JDBC核心技术(获取数据库链接、数据库事务、数据库链接池)
    Vue封装axios
    JAVA_基础反射机制
    dispaly的Grid布局与Flex布局
  • 原文地址:https://www.cnblogs.com/yeyeye123/p/10817080.html
Copyright © 2020-2023  润新知