我正在寻求有关包含多个大括号的文本的帮助
例如,使用此文本:

{{abc|{cde|fgh}} bb|cc}

我想得到
{abc bb|cde bb|fgh bb|cc}

带着这个
pp {vv {ff|ii|nn|aa} | {ee|hh|rr} } xx {{abc|{cde|fgh} bb|cc}

结果是
pp {vv ff|vv ii|vv nn|vv aa | ee|hh|rr} xx {abc bb|cde bb|fgh bb|cc}

这样做的目的是将带有多个大括号的文本放在只有一个大括号的级别上。
我该怎么做?
我想用C#做这个。

最佳答案

我只是给你一个基本的想法,而不是为你写代码。
在最外层的字符串中的每一部分构建一棵树(好吧,可以说是一棵树),其中有两棵树,一棵用于{}另一棵用于a {b} c {d}紧跟在另一个元素后面的每个元素都必须是该元素的子元素每当有多个选项时,每个选项都必须是上一个节点的子节点,并且每个选项都必须将下一个节点作为子节点。
例如,对于{b},您将拥有:

         -> b -
        /      \
  -> a -        -> d -> e
 /      \      /
/        -> c -
\
 \
  -> f

然后从根目录生成所有路径,例如使用depth-first search
路径是{d}{a {b|c} d e | f}-> a -> b -> d -> e
所以我们就有了-> a -> c -> d -> e
实现提示:
Astack可能是跟踪节点的好主意。
-> f之前和之后使用空白中间节点可能是明智的(相信我,这将使实现变得更加容易)。
所以{a b d e | a c d e | f}看起来像:
       -> a -        -> c -
      /      \      /      \
-> . -        -> . -        -> .
      \      /      \      /
       -> b -        -> d -

关于c# - 如何减少文本中的大括号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19812518/

10-12 23:27