字符串的截取

一、在字符串中取字符

  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:分割结果字符串数组

原文地址:https://www.cnblogs.com/zhouwanqiu/p/6918342.html