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

c++ How to split string into two strings based on the last '.'

本文关键字:字符串 两个 何根 最后一个 拆分 c++      更新时间:2023-10-16

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

我尝试使用boost::split但它给出的输出如下:

abc
text
sample
last

再次构造字符串添加'.'将不是好主意,因为顺序很重要。做到这一点的有效方法是什么?

rfind + substr 这样简单的东西

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

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

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

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

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

  1. 取字符指针,从最后一个遍历。

  2. 找到第一个"."时停止,将其替换为"\0"空字符。

  3. 将字符指针分配给该位置。

现在您有两个字符串。

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

我没有包括诸如"."是否最终或任何其他测试用例。

如果你想使用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