c ++如何根据最后一个'。'将字符串拆分为两个字符串。

时间:2016-03-04 10:41:56

标签: c++ split trim

我想根据最后一个'.'将字符串拆分为两个单独的字符串 例如,abc.text.sample.last应该变为abc.text.sample

我尝试使用boost::split,但它提供的输出如下:

abc
text
sample
last

再次构造字符串'.'并不是一个好主意,因为序列很重要。 这样做的有效方法是什么?

6 个答案:

答案 0 :(得分:6)

std::string::find_last_of将为您提供字符串中最后一个点字符的位置,然后您可以使用它来相应地拆分字符串。

答案 1 :(得分:5)

rfind + substr

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

答案 2 :(得分:4)

使用函数std::find_last_of然后string::substr来获得所需的结果。

答案 3 :(得分:2)

搜索第一个'。'从右边开始。使用substr提取子字符串。

答案 4 :(得分:0)

另一种可能的解决方案,假设您可以更新原始字符串。

  1. 取char指针,从最后遍历。

  2. 首先停止'。'找到后,将其替换为'\ 0'null字符。

  3. 将char指针指定给该位置。

  4. 现在你有两个字符串。

    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;
     }
    }
    

    我没有包含像'''这样的测试用例。最后,或任何其他。

答案 5 :(得分:0)

如果你想使用boost,你可以试试这个:

#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