将空格添加到字符串的特定位置

问题描述 投票:2回答:2

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

c++ string binary whitespace range-v3
2个回答
5
投票

使用range-v3库,代码很容易理解:

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

这里是demo


0
投票

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

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

#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;
}
© www.soinside.com 2019 - 2024. All rights reserved.