2017-03-30 32 views
-4

我寻找函数来分割C++中的空白。我在网上找到这个代码。我想知道说什么。如何在C++中使用istringstream?

string line; 
    istringstream buf(line); 
    istream_iterator<string> beg(buf), end; 
    vector<string> tokens(beg, end); 
    return tokens; 
+0

更具体地;我相信有大量的文章解释它。 SO不是一个给你代码解释的网站。 –

+0

为什么我需要istringstream?我想用空格分开 –

+0

请[编辑]你的问题,以表明你的确切目的。 –

回答

0

参见:

#include <iostream> 
#include <sstream> 
#include <vector> 
#include <iterator> 

std::vector<std::string> SplitByWhiteSpace(std::string stringToSplit) 
{ 
    std::istringstream buf(stringToSplit); 
    std::istream_iterator<std::string> beg(buf), end; 
    return std::vector<std::string>(beg, end); 
} 

int main() { 
    std::vector<std::string> tokens = SplitByWhiteSpace("Hello World!"); 

    for (std::size_t i = 0; i < tokens.size(); ++i) 
    { 
     std::cout<<tokens[i]<<"\n"; 
    } 

    return 0; 
} 

即代码分割由白色空间中的字符串,并以矢量返回所有令牌。然后,您可以在矢量中打印所有的标记。

这几乎是一样做(相同的结果,不同的技术):

std::vector<std::string> SplitByWhiteSpace(std::string stringToSplit) 
{ 
    std::string word; 
    std::vector<std::string> tokens; 
    std::istringstream buf(stringToSplit); 

    while (buf >> word) 
    { 
     tokens.push_back(word); 
    } 

    return tokens; 
} 
+0

我尝试了解在何处发生分裂?当我写std :: vector (beg,end); ?? –