用c ++中的空格分割一个字符串

可能重复:
C ++:如何分割一个字符串?
分割一个字符串

在c ++中用空格分隔字符串的最佳方法是什么?

我希望能够根据标签,空间等分割它,当然也可以忽略多个标签/空格/等。 并且最终没有这些事情的问题。

最终,我将最终将其存储在一个向量中,但是如果有一些简单的内置标准库分割方式,我可以轻松地在数据类型之间进行转换。

我正在使用g ++在UNIX机器上构建它, 而不是使用Microsoft Visual C ++


有人可能会质疑它是否是最好的,但真正简单的方法是将字符串放入字符串流中,然后再读取数据:

// warning: untested code.
std::vector<std::string> split(std::string const &input) { 
    std::istringstream buffer(input);
    std::vector<std::string> ret;

    std::copy(std::istream_iterator<std::string>(buffer), 
              std::istream_iterator<std::string>(),
              std::back_inserter(ret));
    return ret;
}

如果你愿意,你可以直接从迭代器初始化vector

std::vector<std::string> split(std::string const &input) { 
    std::istringstream buffer(input);
    std::vector<std::string> ret((std::istream_iterator<std::string>(buffer)), 
                                 std::istream_iterator<std::string>());
    return ret;
}

要么使用任何合理的C ++编译器。 使用C ++ 11,你可以通过使用括号初始化来清理第二个版本:

    std::vector<std::string> ret{std::istream_iterator<std::string>(buffer), 
                                 std::istream_iterator<std::string>()};

对于这个特定的问题,这可能是矫枉过正的,但考虑Boost.Regex。

(说实话,我可能只是写一个脚本来回应每个有关'使用Boost'的c ++问题,然后在业力中出现,但它确实有帮助)。


这是我使用的:

/* Tokenizing a string */
    std::vector<std::string> Parser::tokenizer( const std::string& p_pcstStr, char delim )  {
        std::vector<std::string> tokens;
        std::stringstream   mySstream( p_pcstStr );
        std::string         temp;

        while( getline( mySstream, temp, delim ) ) {
            tokens.push_back( temp );
        }

        return tokens;
    } 

你的delim是一个空格,p_pcstStr是tokenize的字符串,返回的是一个包含所有字符串的向量,它们之间有一个空格。

链接地址: http://www.djcxy.com/p/19569.html

上一篇: Splitting a string by whitespace in c++

下一篇: Is there an equivalent in C++ of PHP's explode() function?