0

我有 5 个字符串,我们称它们为

  • EarthString
  • FireString
  • WindString
  • WaterString
  • HeartString

它们都可以有不同的长度,它们中的任何一个都可以是空的,或者可以很长(但不能为空)。

这5个字符串是很要好的朋友,每个周末都用这个c#语句将它们串联起来形成一个结果字符串

ResultString = EarthString + FireString + WindString + WaterString + HeartString

根据这些字符串的值,有时(仅有时)ResultString将包含“Captain Planet”作为子字符串。

我的问题是,如何在连接 5 个字符串之前对其进行操作,这样当它们组合时,“Captain Planet”将永远不会作为子字符串出现在结果字符串中?

我现在能想到的唯一方法是按顺序检查每个字符串中的每个字符,但这似乎很乏味。由于 5 个好朋友字符串中的每一个都可以是任意长度,因此单独检查字符还需要某种连接,然后才能确定是否需要删除任何字符。

编辑:结果字符串是连接在一起的 5 个字符串的过滤版本,所有其他内容保持不变,除了“Captain Planet”字符串被删除。是的,我正在寻找一种允许在连接之前对 5 个字符串进行操作的解决方案。(这实际上是我遇到的更大编程问题的简化)。多谢你们。

4

4 回答 4

1

你不能这样做有什么特别的原因吗?

ResultString.Replace("CaptainPlanet", "x"); 
于 2013-01-28T12:41:44.970 回答
1

如果你想在连接前做,你可以

根据它们所包含的“CaptainPlanet”部分为每个字符串的开头和结尾分配一个数值。例如:如果 Air = "net the big Captain",那么它会得到 3 的起始值和 7 的结束值。要确定是否可以安全地连接 2 个值,您只需检查左侧字符串的结尾 + 右侧字符串的开头是否不等于“CaptainPlanet”的总长度。如果您有非常大的字符串,这将允许您仅检查字符串的前 x 和最后 x 字符来计算开始/结束值。

此解决方案不考虑 ei air = "Cap" 、 earth ="tain" 和 fire="Planet" 等短字符串。在这种情况下,对于那些比“CaptainPlanet”长度短的令牌,您需要有一个特殊情况。

于 2013-01-28T12:50:19.593 回答
0

如果删除多少个字符并不重要,您可以删除'C'所有字符串中的 fe all。

于 2013-01-28T12:48:09.857 回答
0

原始答案清除了所有字符串,但正如 J.Steen 所指出的,已经有一个预期输出的公式。所以我们开始了。

  1. elementString.Replace("Captain Planet", "")在每个子字符串上运行。

  2. 现在您必须在每个子字符串上识别“Captain Planet”的所有前缀/后缀,并保留该信息以便在合并之前对其进行处理。也就是说,例如,如果子字符串以“Capt”结尾,那么您应该有一个信息,即“子字符串末尾包含 'Captain Planet' 的 4 个首字母的前缀”。您还必须考虑完整子字符串的情况(例如,其中一个字符串是“ptain Pla”)。如果任何例如前缀可以递归或重复,问题也会变得更加复杂(例如,“CaptainCap”包含“CaptainCaptain”的两种有效前缀,并且“apt”可以在结果字符串的两个位置找到);

  3. 您在连接之前处理该信息,以便结果字符串与ResultString.Replace("Captain Planet", ""). 恭喜,您使程序变得比必要的复杂得多!

但简而言之,您无法同时获得所需的结果(除了组合结果输出之外的所有子字符串都完好无损)并在连接步骤之前完全进行处理。

于 2013-01-28T12:58:34.917 回答