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