在特定位置向字符串添加空格

Add whitespace to string at specific places

我有一个字符串“00000000000000000000010011010010”。我想在每八个字符后添加一个空格,使其代表一个 32 位整数。例如:“00000000 00000000 00000100 11010010”。最简单的方法是什么?

有了range-v3库,代码就很容易理解了:

using namespace ranges;
auto res = s | views::chunk(8) | views::join(' ') | to<std::string>;

这是一个demo

构造一个新的以空格分隔的字符串

由于插入有点昂贵,您可能希望简单地构造一个新字符串并从原始字符串填充它,在每个八个字符的子字符串后添加适当的空格(最后一个子字符串除外)。

#include <cstddef>
#include <iostream>
#include <string>

std::string chunked(const std::string& s,
                    const std::size_t chunk_size = 8U,
                    const char delimiter = ' ') {
    std::string result;
    const auto s_size = s.size();
    result.reserve(s_size + (s_size / chunk_size));

    for (std::size_t i = 0U; i < s_size; i += chunk_size) {
        result += s.substr(i, chunk_size);
        if (i + chunk_size < s_size) { 
            result += delimiter; 
        }
    }

    return result;
}

int main() {
    std::cout << chunked({"00000000000000000000010011010010"}); 
      // 00000000 00000000 00000100 11010010

    return 0;
}

将现有字符串打印为以空格分隔的块

或者,您的用例可能只是将字符串打印为以空格分隔的 8 字符块:

#include <cstddef>
#include <iostream>
#include <string>

void printAsChunks(const std::string& s, 
                   const std::size_t chunk_size = 8U) {
    for (std::size_t i = 0U; i < s.size(); i += chunk_size) {
        std::cout << s.substr(i, chunk_size) 
            << ((i + chunk_size < s.size()) ? " " : "");
    }
}

int main() {
    printAsChunks("00000000000000000000010011010010");
        // 00000000 00000000 00000100 11010010
    return 0;
}