首页 > 解决方案 > 交替从字符串中删除每个字符,将其余字符作为每个循环返回一个

问题描述

示例输入string"12345"结果应该是:"2345, 1345, 1245, 1235, 1234". 我已经尝试过SubstringRemove 独自一人,并与成功的一半相结合。如果可能的话,我宁愿不必手动将字符串的元素放入和操作列表/数组中,并将解决方案保留在基本的字符串操作中。这是我最近的尝试:

using System;
                    
public class Program
{
    public static void Main()
    {
        string message = "12345"; // length: 5
        string removed; int i = 0;
        
        removed = message.Substring(i+1); Console.WriteLine("1: " + removed);

        for(i = 2; i < message.Length; i++) {
            removed = message.Substring(i);
        
            Console.WriteLine(i + ": " + removed);
        }

        removed = message.Substring(i); 
        
        Console.WriteLine(i + ": " + removed);
    }
}

@Mureinik 感谢您的解决方案。我选择它是因为它的简单性。

Remove我还意识到,当我第一次厌倦使用它时,我可能搞砸了我的索引迭代;这就是为什么它不断抛出异常。

我决定将我的代码留在这里作为我解释的参考,因为我选择的解决方案看起来不同。

标签: c#stringloops

解决方案


好吧,您可以借助以下方法来做到这一点Remove

private static IEnumerable<string> Removes(string value) {
  if (string.IsNullOrEmpty(value))
    yield break;

  for (int i = 0; i < value.Length; ++i)
    yield return value.Remove(i, 1);
}

或者Substring(效率稍低):

private static IEnumerable<string> Removes(string value) {
  if (string.IsNullOrEmpty(value))
    yield break;

  for (int i = 0; i < value.Length; ++i)
    yield return value.Substring(0, i) + value.Substring(i + 1);
}

演示:

Console.Write(string.Join(", ", Removes("12345")));

结果:

2345, 1345, 1245, 1235, 1234

推荐阅读