gpt4 book ai didi

c++ - C : advantages and disadvantages 中的另一种字符串实现

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:12:10 24 4
gpt4 key购买 nike

看完文章"Back to Basics"由 Mr.Spolsky 我考虑过 C 中的字符串结构,它融合了 Pascal 风格字符串(带长度字节)和 C 中经典 ASCIIZ 字符串的大部分优点,并减少了它们的大部分缺点。主要需求是让这个新字符串在机器命令中生效。 (对于这个任务,我假设每个字符都是单字节。对不起。:))

我的想法是在这种结构的字节数组中存储字符串(也可以包含零字节):

  • 0 - 字符串长度表示的字节长度(值为 1 或更大);
  • 1..presLength+1 - 字符串长度表示(1 个或多个字节;可能具有固定长度(处理更简单,但确定字符串长度限制));
  • presLength+2..arrrayLength - 字符串内容。

我希望这种方法可以解决 Mr.Spolsky 注意到的大部分问题,但假设还有一些不足。我想知道你的意见。你怎么看?

最佳答案

太复杂了。即使是一个非常简单的操作——将单个字符附加到字符串的末尾——也需要以下步骤(假设可变字符串):

  1. 读取字节 0 以确定 length presentation 的长度
  2. 读取字节1..p,计算长度
  3. 在字符串末尾写入字符
  4. 增加长度,检查溢出
  5. 如果溢出:增加字节 0,移动整个字符串以腾出空间用于更长的长度呈现
  6. 写入新的长度

这不太合理。只使用一个类似 pascal 的字符串,但使用一个字(32 位整数)而不是长度字节,并使整个字符串字对齐,这样更容易也更快。对于真正的字符串,最大大小的 4GB 限制几乎无关紧要。

关于c++ - C : advantages and disadvantages 中的另一种字符串实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1802489/

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