首页 > 代码库 > 字符串的截取

字符串的截取

一、在字符串中取字符

  CString str="12 34 56 78";

  str.Left(1);

  str.Left(2);

  str.Right(1);

  str.Righr(3);

  str.Mid(4,2);

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

  CString str="123@abc";

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

  if(pos!=-1){

    str.Insert(pos,‘#‘);

  }

三、字符串的拆分

  1、AfxExtractSubString函数

    BOOL AfxExtractSubString(

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

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

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

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

    )

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

    例:

      CString strOrg=_T(“192.168.0.1”);

      CString strGet1="";

      CString strOut1="";

      int i=0;

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

        strOut1+=strGet1+"\r\n";

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

 

字符串的截取