Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在字符串的特定位置添加空白_C++_String_Binary_Whitespace_Range V3 - Fatal编程技术网

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

C++ 在字符串的特定位置添加空白,c++,string,binary,whitespace,range-v3,C++,String,Binary,Whitespace,Range V3,我有一个字符串“00000000000000010011010010”。我想在每八个字符后添加一个空格,使其表示一个32位整数。例如:“00000000000000000000000010011010010”。最简单的方法是什么?对于range-v3库,代码非常容易理解: using namespace ranges; auto res = s | views::chunk(8) | views::join(' ') | to<std::string>; 使用名称空间范围; aut

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

对于range-v3库,代码非常容易理解:

using namespace ranges;
auto res = s | views::chunk(8) | views::join(' ') | to<std::string>;
使用名称空间范围;
auto res=s | views::chunk(8)| views::join(“”)to;
下面是一个。

构造一个新的以空格分隔的字符串 由于插入有点昂贵,您可能需要简单地构造一个新字符串并从原始字符串填充它,在每个包含8个字符的子字符串(最后的子字符串除外)后适当地添加空格

#包括
#包括
#包括
std::string分块(const std::string&s,
const std::size\u t chunk\u size=8U,
常量字符分隔符=“”){
std::字符串结果;
const auto s_size=s.size();
结果.保留(s_大小+(s_大小/块大小));
对于(std::size\u t i=0U;istd::是否可以在循环中保留空格直到字符串结束?请记住,插入字符将更改长度。是否确实要在字符串中放置空格,还是只显示包含这些空格的字符串?请注意,创建新字符串将比在placeNice中修改当前字符串更简单。请注意,问题-此处这是一个非常好的设计,这类范围API是C++标准的20标准的,是的,绝对的。<代码> CUBUD>代码>在C++ 20中是不可用的,尽管<代码>连接< /代码>是。你仍然可以自己编写而不需要太多的努力:)尼斯,一个优秀的新C++特性,允许编写更多功能性的风格代码SI。类似于其他现代语言,如Swift。@djacob它只是一个位运算符:),但是是的,该运算符对于ranges来说是超负荷的,具有unix管道式语义。你可以在这里找到c++20,但也可以观看一些很好的youtube视频。
ranges::to
也错过了c++20,但它将在'2'中出现3,在此之前,您可以使用range-v3中的版本。
#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;
}
#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;
}