字符串截取 c++

来源:互联网 发布:淘宝运营师培训 怎么考 编辑:程序博客网 时间:2024/06/16 21:36

C++ 字符串截取相关函数讲解

CString
 1 CString res;
 2 CString str = _T("abcdefghijklmn");
 3 res = str.Mid(2,3);  //从第3位字母开始,共取3个字符
 4 ASSERT(res == _T("cde"));
 5 
 6 res = str.Left(3);  //从左边数起,共取3个字符
 7 ASSERT(res == _T("abc"));
 8 
 9 res = str.Right(3);  //从右边数起,共取3个字符
10 ASSERT(res == _T("lmn"));
11 
12 res = str.SpanIncluding(_T("edcba"));  //遇到参数里没有的字符即停下,返回停下之前的字符串
13 ASSERT(res == _T("abcde"));
14 
15 res = str.SpanExcluding(_T("fgb"));  //遇到参数里面有的字符即停下,返回停下之前的字符串
16 ASSERT(res == _T("a"));


String

截取子串

       s.substr(pos, n)    截取s中从pos开始(包括0)的n个字符的子串,并返回

       s.substr(pos)        截取s中从从pos开始(包括0)到末尾的所有字符的子串,并返回


附加:

截取字符串子串 (1)(GBK)
*
* @param string $str 原始字符串
* @param int $len 需要截取字符串的长度
* @return string 返回截取到的字符串
*/
function GBSubstr($str, $len){
       $count = 0;
       for($i=0; $i<strlen($str); $i++){
               if($count == $len) break;
               if(preg_match("/[\x80-\xff]/", substr($str, $i, 1))) ++$i;
               ++$count;       
       }
       return substr($str, 0, $i);
}

 

 

 

 

 

一个这样的字符串:“123,456,789,0”。把他截取成这样的字符串数组[123],[456],[789],[0]。众所周知c++默认没有提供这样功能的函数,下面我们自己来实现它
不多说直接上代码:
C++代码
#include<iostream>  
#include<string>  
#include<vector>  
using namespace std;  
 
vector<string> splitEx(conststring& src, stringseparate_character)  
 
   vector<string>strs;  
      
    int separate_characterLen =separate_character.size();//分割字符串的长度,这样就可以支持如“,,”多字符串的分隔符  
    intlastPosition = 0,index =-1;  
    while (-1 !=(index =src.find(separate_character,lastPosition)))  
    
       strs.push_back(src.substr(lastPosition,index -lastPosition));  
       lastPosition = index +separate_characterLen;  
    
    stringlastString =src.substr(lastPosition);//截取最后一个分隔符后的内容  
    if(!lastString.empty())  
       strs.push_back(lastString);//如果最后一个分隔符后还有内容就入队  
    returnstrs;  
 
 
int _tmain(int argc, _TCHAR*argv[])  
 
    string s ="123,456,789,0,888";  
    string del =",";    
   vector<string> strs = splitEx(s,del);    
    for (unsigned int i = 0; i < strs.size();i++)    
      
       cout << strs[i].c_str()<<endl;  
      
    return0;    

#include <iostream>
#include <string>
#include <vector>
using namespace std;

vector<string> splitEx(conststring& src, string separate_character)
{
   vector<string> strs;
   
    int separate_characterLen =separate_character.size();//分割字符串的长度,这样就可以支持如“,,”多字符串的分隔符
    intlastPosition = 0,index = -1;
    while (-1 !=(index = src.find(separate_character,lastPosition)))
    {
       strs.push_back(src.substr(lastPosition,index -lastPosition));
       lastPosition = index + separate_characterLen;
    }
    stringlastString = src.substr(lastPosition);//截取最后一个分隔符后的内容
    if(!lastString.empty())
       strs.push_back(lastString);//如果最后一个分隔符后还有内容就入队
    returnstrs;
}

int _tmain(int argc, _TCHAR* argv[])
{
    string s ="123,456,789,0,888";
    string del =","; 
   vector<string> strs = splitEx(s,del); 
    for (unsigned int i = 0; i < strs.size();i++) 
   
       cout << strs[i].c_str()<< endl;
   
    return0; 
}

输出:
123
456
789
0
888

http://blog.sina.com.cn/s/blog_4ff373440100w7xr.html

0 0
原创粉丝点击