在特定位置向字符串添加空格
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;
}
我有一个字符串“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;
}