我想根據最後的'.'
將字符串拆分爲兩個單獨的字符串。例如,abc.text.sample.last
應該變爲abc.text.sample
。C++如何根據最後的'。'將字符串拆分爲兩個字符串。
我嘗試使用boost::split
但如下給出輸出:
'.'
的
abc
text
sample
last
建設不會是好主意,因爲順序問題。 什麼將是有效的方式來做到這一點?
我想根據最後的'.'
將字符串拆分爲兩個單獨的字符串。例如,abc.text.sample.last
應該變爲abc.text.sample
。C++如何根據最後的'。'將字符串拆分爲兩個字符串。
我嘗試使用boost::split
但如下給出輸出:
'.'
的
abc
text
sample
last
建設不會是好主意,因爲順序問題。 什麼將是有效的方式來做到這一點?
std::string::find_last_of
將爲您提供字符串中最後一個點字符的位置,然後您可以使用該位置來相應地拆分字符串。
搜索第一個'。'從右邊開始。使用substr
來提取子字符串。
利用功能std::find_last_of然後string::substr來實現所需的結果。
一些簡單的rfind
+ substr
size_t pos = str.rfind("."); // or better str.rfind('.') as suggested by @DieterLücking
new_str = str.substr(0, pos);
'str.rfind( '');一個'單個字符 –
這(經修改)是正確的答案。 'rfind('。')'是比'find_last_not_of'更好的選擇;後者必須做一些額外的輪子旋轉,因爲它可以搜索多個字符。 –
還有一個可能的解決方案,假設你可以更新原始的字符串。
帶上char指針,從最後遍歷。
第一次停止時'。'發現,用'\ 0'空字符替換它。
將字符指針指定給該位置。
現在你有兩個字符串。
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;
}
}
我還沒有包含像'。'這樣的測試用例。是最後的,還是其他的。
如果你想使用升壓,你可以試試這個:
#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
謝謝你,將使用 – Namitha