【问题标题】:c++ How to split string into two strings based on the last '.'c ++如何根据最后一个'。'将字符串拆分为两个字符串
【发布时间】:2016-06-18 01:32:02
【问题描述】:

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

我尝试使用boost::split,但输出如下:

abc
text
sample
last

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

【问题讨论】:

    标签: c++ split trim


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 谢谢,会用的
      【解决方案3】:

      利用函数std::find_last_of然后string::substr达到预期的效果。

      【讨论】:

        【解决方案4】:

        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 更好的选择;后者必须做一些额外的轮子旋转,因为它可以搜索多个字符。
        【解决方案5】:

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

        1. 取char指针,从last遍历。

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

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

        现在你有两个字符串了。

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

        我没有包含像 if '.' 这样的测试用例。终于,或任何其他。

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-04-11
            • 1970-01-01
            • 2011-06-14
            • 2022-06-11
            • 2017-10-07
            • 2011-02-01
            • 1970-01-01
            相关资源
            最近更新 更多