【问题标题】:string to fit rectangle [closed]适合矩形的字符串[关闭]
【发布时间】:2010-11-08 15:51:55
【问题描述】:

如何实现手动字符串分割算法以适应矩形。(在需要的地方插入...或\n) 我可以计算字符串的长度(以像素为单位)。

我有标准的 std::string 和 包含左、上、宽、高的矩形结构 如何将字符串拆分为大小不大于给定大小的矩形的单词短语

以像素为单位返回字符串的宽度

int GetStringWidth(std::string str)

【问题讨论】:

  • 您是否只是假设每个人都知道您在说什么,并且世界上所有的程序员都在使用与您相同的编译器/操作系统/gizmo 工具箱?
  • 请指定您的工作操作系统和编译器
  • 标准c++编译器,操作系统无所谓
  • 是在讨论文本布局算法吗?也许那会是一个更好的标题/描述。
  • 您是否必须对字符串进行格式化,以使单词准确地对接矩形的左右边缘,或者右边缘参差不齐?你可以在任何地方分割字符串,还是只在单词之间分割?是否必须填满矩形的整个高度,还是可以留一些空白?

标签: c++ word-wrap pseudocode


【解决方案1】:

好的,假设仅左对齐,一个非常基本的方法是这样的:

您引入了两个索引 lineStart/lineEnd 来标记输入字符串中可能的文本行的开始和结束。然后循环输入字符串中的所有单词,并为每个单词检查是否可以在不超过矩形宽度的情况下将其添加到当前行。如果是,则相应地增加 lineEnd。如果不是,则将当前片段 [lineStart..lineEnd] 添加到结果中,然后将 lineStart/lineEnd 重置为当前单词的开头(将是下一行的第一个单词)。

有几种边界情况需要考虑,包括(但可能不限于)单个单词可能比矩形宽度宽的可能性;最后一行可能也需要显式处理。

【讨论】:

    【解决方案2】:

    拆分字符串(使用您选择的分隔符 - 我假设您希望它是空白),然后遍历字符串标记,打印每个标记,直到您无法将其放入剩余空间,然后继续到下一行继续前进。

    See this post for how to split a string.

    【讨论】:

      【解决方案3】:

      您没有提供任何背景信息,因此无法回答您的问题。根据您给我的信息,只需计算矩形的宽度,并将字符串的长度设置为矩形的宽度减去一些额外的插入空间。

      【讨论】:

      • +1 来抵消不公平的 -1(你是对的,问题没有包含足够的信息)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-03
      • 1970-01-01
      相关资源
      最近更新 更多