我有一个字符串“ 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;
}