如何在C ++中将String拆分为字符串2d数组

时间:2017-05-11 16:22:37

标签: c++ arrays string

我想将字符串拆分为2d字符串并将数组的第一个索引除以仅存储3个字的引用,而将第二个索引存储为我已经阅读此帖子的单词类似于它但它不是对我来说好StackOver Flow,为了正确地理解它,我举了一个例子 例如 string a ="你好我正在编写c ++代码&#34 ;;

我想将其转换为

string b[100][3];
b[0][1]="hello";
b[0][2]="I";
b[0][3]="am";
b[1][1]="writing";
b[1][2]="c++";
b[1][3]="code";

1 个答案:

答案 0 :(得分:0)

这有效,我认为会做你想做的事:

#include <array>
#include <iostream>
#include <string>
#include <utility>
#include <vector>

std::vector< std::array< std::string, 3 > > split( std::string const &s )
{
    std::vector< std::array< std::string, 3 > > rv;
    std::array< std::string, 3 > a;
    int i = 0;
    size_t first = 0, len = s.size();

    while (first < len)
    {
        size_t last = s.find( ' ', first );
        if (last == std::string::npos)
            last = len;
        a[i++] = s.substr( first, last - first );
        first = last + 1;
        if (i == 3)
        {
            rv.emplace_back( std::move( a ) );
            i = 0;
        }
    }
    if (i)
        rv.emplace_back( std::move( a ) );

    return rv;
}

int main()
{
    auto v = split( "Hello I am writing c++ code" );
    for (auto const &a : v)
        std::cout << "'" << a[0] << "'; '" << a[1] << "'; '" << a[2] << "'\n";
    return 0;
}