zoukankan      html  css  js  c++  java
  • 字符串的截取

    一、在字符串中取字符

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

  • 相关阅读:
    C++11 function用法 可调用对象模板类
    2017年团体程序设计天梯赛
    CCCC 以及 hihocoder offer收割赛11 ~~~
    Wannafly Union Goodbye 2016-A//初识随机化~
    Good Bye 2016 //智商再次下线,边界爆炸.....
    连做两场goodbye2016是怎样的体验.....
    2016CCPC 合肥--最大公约数//每一年通向它的路上,多少人折戟沉沙,多少人功败垂成,有人一战成名,有人从头再来。
    2016 CCPC 合肥赛区 平行四边形//打铁记录..... 背锅还是我在行 此处@ctr 233
    补题安排及挂机....
    BZOJ3670:[NOI2014]动物园
  • 原文地址:https://www.cnblogs.com/zhouwanqiu/p/6918342.html
Copyright © 2011-2022 走看看