2016-03-04 114 views
3

我想根據最後的'.' 將字符串拆分爲兩個單獨的字符串。例如,abc.text.sample.last應該變爲abc.text.sampleC++如何根據最後的'。'將字符串拆分爲兩個字符串。

我嘗試使用boost::split但如下給出輸出:

字符串再次添加 '.'
abc 
text 
sample 
last 

建設不會是好主意,因爲順序問題。 什麼將是有效的方式來做到這一點?

回答

6

std::string::find_last_of將爲您提供字符串中最後一個點字符的位置,然後您可以使用該位置來相應地拆分字符串。

+0

謝謝你,將使用 – Namitha

2

搜索第一個'。'從右邊開始。使用substr來提取子字符串。

5

一些簡單的rfind + substr

size_t pos = str.rfind("."); // or better str.rfind('.') as suggested by @DieterLücking 
new_str = str.substr(0, pos); 
+4

'str.rfind( '');一個'單個字符 –

+0

這(經修改)是正確的答案。 'rfind('。')'是比'find_last_not_of'更好的選擇;後者必須做一些額外的輪子旋轉,因爲它可以搜索多個字符。 –

0

還有一個可能的解決方案,假設你可以更新原始的字符串。

  1. 帶上char指針,從最後遍歷。

  2. 第一次停止時'。'發現,用'\ 0'空字符替換它。

  3. 將字符指針指定給該位置。

現在你有兩個字符串。

char *second; 
int length = string.length(); 
for(int i=length-1; i >= 0; i--){ 
if(string[i]=='.'){ 
string[i] = '\0'; 
second = string[i+1]; 
break; 
} 
} 

我還沒有包含像'。'這樣的測試用例。是最後的,還是其他的。

0

如果你想使用升壓,你可以試試這個:

#include<iostream> 
#include<boost/algorithm/string.hpp>  
using namespace std; 
using namespace boost; 
int main(){ 
    string mytext= "abc.text.sample.last"; 
    typedef split_iterator<string::iterator> string_split_iterator; 
    for(string_split_iterator It= 
     make_split_iterator(mytext, last_finder(".", is_iequal())); 
     It!=string_split_iterator(); 
     ++It) 
    { 
     cout << copy_range<string>(*It) << endl; 
    } 
    return 0; 
} 

輸出:

abc.text.sample 
last 
相關問題