如何使用istringstream与其他分隔符分割字符串而不是空白?

Cha*_*han 33 c++

以下技巧istringstream用于分割带有空格的字符串.

int main() {
    string sentence("Cpp is fun");
    istringstream in(sentence);
    vector<string> vec = vector<string>(istream_iterator<string>(in), istream_iterator<string>());
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

是否有类似的技巧来分割带any分隔符的字符串?例如,|在"Cpp | is | fun"中.

小智 20

一般来说,istringstream方法是慢/低效的,并且至少需要与字符串本身一样多的内存(当你有一个非常大的字符串时会发生什么?).在C++字符串工具箱库(StrTk)具有以下问题的解决方案:

#include <string>
#include <vector>
#include <deque>
#include "strtk.hpp"
int main()
{
   std::string sentence1( "Cpp is fun" );
   std::vector<std::string> vec;
   strtk::parse(sentence1," ",vec);

   std::string sentence2( "Cpp,is|fun" );
   std::deque<std::string> deq;
   strtk::parse(sentence2,"|,",deq);

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

更多例子可以在这里找到

  • 这不回答问题,因为问题是关于使用流分割.差异在于流媒体.解析时,这可能是网络流或从磁盘加载流.它可能足够大. (12认同)

The*_*ign 6

#include <iostream>
#include <string>
#include <sstream>

int main()
{
  std::istringstream iss { "Cpp|is|fun" };

  std::string s;
  while ( std::getline( iss, s, '|' ) )
    std::cout << s << std::endl;

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

演示


归档时间:

查看次数:

15973 次

最近记录:

7 年,8 月 前