gpt4 book ai didi

c++ - 从最多 X 个字符构造 std::string,在空字符处停止

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:37:17 25 4
gpt4 key购买 nike

我正在从文件中的结构中读取字符串,其中每个字符串都有固定长度,并带有 '\0' 填充。如果存储的字符串需要整个长度,它们不会以零结尾。

我目前正在用这样的方式构造 std::string:

// char MyString[1000];
std::string stdmystring(MyString, ARRAYSIZE(MyString));

但是,这也会复制填充。我现在可以修剪字符串,但是是否有一种优雅而快速的方法来首先防止复制?

速度比空间更重要,因为这是循环运行。

最佳答案

简单的解决方案是:

  1. 先计算出正确的长度

    • 按照 Dieter 的建议使用 strnlen
    • std::find(MyString,MyString+ARRAYSIZE(MyString),'\0') IME 一点也不慢

    请注意,如果您的字符串适合缓存,这可能会控制额外的循环成本

  2. 保留最大字符串大小(您确实说过空格不太重要),并编写一个循环附加字符,直到您耗尽宽度或命中 nul(如 copy_until)

  3. 实际创建一个用 nuls 初始化的最大大小的字符串,strncpy 放入其中,如果您希望大小正确,可以选择删除未使用的 nuls

第二个选项只使用一个循环,而第三个选项名义上使用两个(它在字符串 ctor 中,然后在拷贝中)。然而,每个字符的 push_back 似乎比简单的字符分配更昂贵,所以如果 #3 在现实中更快,我不会感到惊讶。简介看看!

关于c++ - 从最多 X 个字符构造 std::string,在空字符处停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32485309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com