• 字符串的截取


    一、在字符串中取字符

      CString str="12 34 56 78";

      str.Left(1);  //"1"

      str.Left(2);  //"12"

      str.Right(1);  //"8"

      str.Righr(3);  //" 78"

      str.Mid(4,2);  //"4 "

    二、在字符串中查找、替换特定字符

      1、int Find(str[,nStart])  在一段字符串中查找字符或字符串,返回其在该段字符串中的索引值,失败返回-1;nStart默认为0从头开始索引,若不为0则位于nStart索引前的字符不在搜索范围内

        CString str="123@abc";

        int pos=str.Find("@");

        if(pos!=-1){

          str.Insert(pos,'#');

        }

        int num=str.Replace("3@a","##");  //被替换了num个字符

      2、ReverseFind(str)  在一段字符串中搜索某字符,返回在该段字符串中与之匹配的最后一个字符的索引值,失败返回-1

        CString strPath="C:Program FilesGooglezwq.dll";

        int nPos=strPath.ReverseFind(_T('\'));

        CString strExePath;

        strExePath=strPath.Left(nPos+1);  //"C:Program FilesGoogle"

    三、去除字符串首尾的指定字符

      CString str=" i love  you,    you konw  ?   ";

      str=str.Trim();  //删除字符串头部及尾部出现的空格,删除的过程为从外到内直到碰到一个非空格的字符为止,所以不管前后有多少个连续的空格都会被删除掉

      str=str.TrimStart();  //删除字符串的头部的空格

      str=str.TrimEnd();  //删除字符串尾部的空格

      str=str.Trim("abc".ToCharArray());  //删除字符串头部及尾部出现的a或b或c字符,删除的过程直到碰到一个既不是a也不是b也不是c的字符才结束

      str=str.TrimEnd("o yu?".ToCharArray());  //" i love  you,    you konw"

    四、字符串的拆分

      1、AfxExtractSubString函数

        BOOL AfxExtractSubString(

          CString& rString,  //取到的字符串

          LPCTSTR lpszFullString,  //要拆分的字符串

          int iSubString,  //要提取的子字符串的位置,从0开始

          TCHAR chSep=’ ’  //分隔符,默认为

        )

        须包含头文件:#include <afxwin.h>

        例:

          CString strOrg=_T(“192.168.0.1”);

          CString strGet1="";

          CString strOut1="";

          int i=0;

          while(AfxExtractSubString(strGet1,strOrg,i,'.')){        

            strOut1+=strGet1+" ";

            i++;

          }

          SetDlgItemText(IDC_EDIT1,strOut1);

        注意:如果出现连续的分隔符,比如字符串1|2||||3 ,用AfxExtractSubString得到的是1 2 空字符串 空字符串 空字符串 3

      2、strtok函数

        char *strtok( char *strToken, const char *strDelimit );

          strToken: 目标字符串

          strDelimit: 分隔符

        须包含头文件:#include <string.h>

        例:

          CString strOrg=_T(“192.168.0.1”);

          TCHAR seps[]=_T(".");

          TCHAR* strGet=strtok((LPTSTR)(LPCTSTR)strOrg,seps);

          AfxMessageBox(strGet);  //192

          strGet= strtok (NULL,seps);  //指针下移一位

          AfxMessageBox(strGet);  //168

          strGet= strtok (NULL,seps);

          AfxMessageBox(strGet);  //0

          strGet= strtok (NULL,seps);

          AfxMessageBox(strGet);  //1

          strGet= strtok (NULL,seps);

          If(strGet==NULL){

            AfxMessageBox(“没有了”);

          }

        注意:strtok允许多分割字符,比如空格+逗号表示为’ ,’ ,还有一点需要注意的是如果被分割的字符第一个是分割符,那么该字符会被忽略掉,如果出现连续的分隔符,那么也会忽略掉,比如字符串1|2||||3,用strtok来分割将得到1 2 3

      3、_tcstok函数

        char* _tcstok( char* strToken, const char* strDelimit );

          strToken: 目标字符串

          strDelimit: 分隔符

        须包含头文件:#include <TCHAR.H>

        例:使用方法和strtok函数相同

          CString strOrg=_T(“192.168.0.1”);

          TCHAR seps[]=_T(".");

          TCHAR* strGet=_tcstok((LPTSTR)(LPCTSTR)strOrg,seps);

          AfxMessageBox(strGet);  //192

          strGet=_tcstok(NULL,seps);  //指针下移一位

          AfxMessageBox(strGet);  //168

          strGet=_tcstok(NULL,seps);

          AfxMessageBox(strGet);  //0

          strGet=_tcstok(NULL,seps);

          AfxMessageBox(strGet);  //1

          strGet=_tcstok(NULL,seps);

          If(strGet==NULL){

            AfxMessageBox(“没有了”);

          }

      4、自定义分割函数

        void Split(CString source, CString divKey, CStringArray& dest)

        {

                      dest.RemoveAll();

                      int pos = 0;

                      int pre_pos = 0;

                      while( -1 != pos ){

                           pre_pos = pos;

                           pos = source.Find(divKey,(pos+1));

                           dest.Add(source.Mid(pre_pos,(pos-pre_pos)));

                      }

                }

        参数:

          source:待分割的源串

          divKey:分割符

          dest:分割结果字符串数组

  • 相关阅读:
    OnSize() 与 OnInitDialog()[设置控件大小]
    C库函数中字符串处理函数集合
    智能提示导致Visual Studio 2010崩溃问题
    MFC中关闭窗口的几种方法
    8086寄存器组
    MASM6.1使用方法(适合初学者)
    MultiThread
    汇编语言超浓缩教程
    汇编 ADD与DAA指令
    Function Pointer
  • 原文地址:https://www.cnblogs.com/zhouwanqiu/p/6918342.html
Copyright © 2020-2023  润新知