将字符串分成N个部分

时间:2018-12-24 14:16:31

标签: c++ string parsing arduino

我正在开发一个Arduino代码,该代码接受具有可变大小的字符串的输入,目的是将字符串分成N个部分(N也由Arduino代码输入,这是一个变量)。

我找到了不同的代码,将字符串分成N个相等的部分,但是如果字符串有9个字符并且所需的部分为2,则该代码将无效。

我的想法是创建一个能够通过以下结果分割字符串的代码

str_size % n

不同于零。

例如,如果字符串为“ HELLO”且部件为2,则输出应为“ HEL”和“ LO”。

能请你帮我吗?

2 个答案:

答案 0 :(得分:-1)

您可以递归进行。

第一部分尺寸m = (str_size+N-1)/N;
然后str_size -= m;N--;

一个小例子:

#include <iostream>
#include <vector>
#include <string>

std::vector<std::string> split_string(const std::string& s, int N) {
    std::vector<std::string> vect;
    if (N > s.size()) return vect;
    vect.resize(N);
    int n = s.size();
    auto it = s.begin();
    int Nnew = N;
    for (int i = 0; i < N; i++) {
        int m = (n+Nnew-1)/Nnew;
        vect[i] = std::string (it, it+m);
        it += m;
        n = n - m;
        Nnew--;
    }
    return vect;
}

int main() {
    int N = 3;
    std::string str = "Very!HappyXmas";
    auto result = split_string (str, N);
    for (auto s : result) {
        std::cout << s << "\n";
    }
    return 0;
}

答案 1 :(得分:-1)

给出L是文本的长度,您可以提取长度为L%N的前l = L/N + 1部分,其余为N - L%N长度的l = L/N部分

std::size_t N = 3;
std::string str = "some random stringxx";

std::vector<std::string> splits(N);
for (std::size_t i = 0, L = str.size(); i < N; ++i) {
    splits[i] = str.substr(i*(L/N) + std::min(i, L%N), L/N + (i < L%N ? 1 : 0));
}

Output:
  - 'some ra'
  - 'ndom st'
  - 'ringxx' 

Demo