字符串截取 c++

 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值