提问者:小点点

在字符串的特定位置添加空白


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


共2个答案

匿名用户

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

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

这是一个演示。

匿名用户

由于插入有点昂贵,您可能想简单地构造一个新字符串并从原始字符串填充它,在每八个字符后面适当地添加空格。

例如。 通过在时间上附加一个字符:

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

int main() {
    const std::string a{"00000000000000000000010011010010"};
    std::string b;
    const auto a_size = a.size();

    b.reserve(a_size + (a_size / 8U));

    for (std::size_t i = 0U; i < a_size; ++i) {
        b += a[i];
        if ((i != a_size - 1U) && ((i + 1U) % 8U == 0U)) { 
            b += ' '; 
        }
    }

    std::cout << b << "\n";  
      // 00000000 00000000 00000100 11010010

    return 0;
}

或者,例如使用std::basic_string<>>::substr:

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

int main() {
    const std::string a{"00000000000000000000010011010010"};
    std::string b;
    const auto a_size = a.size();
    const std::size_t chunk_size = 8U;

    b.reserve(a_size + (a_size / chunk_size));

    for (std::size_t i = 0U; i < a_size; i += chunk_size) {
        b += a.substr(i, chunk_size);
        if (i + chunk_size < a_size) { 
            b += ' '; 
        }
    }

    std::cout << b << "\n";  
      // 00000000 00000000 00000100 11010010

    return 0;
}

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

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

void printAsChunks(const std::string& s, 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;
}