首页 > 解决方案 > 获取数字的子字符串

问题描述

如果输入为 6789,则输出应为 6,7,8,9,67,78,89,678,789,6789

该逻辑应该适用于大量数字,例如 67890,12345678 等

    static Int64 substrings(string n)
    {
        string p = string.Empty, q = string.Empty, r = string.Empty;
        char[] c = n.ToCharArray();
        string s = string.Empty;
        Int64 res = 0;

        for (int x = 0; x < n.Length; x++)
        {
            res += Convert.ToInt64(n[x].ToString());
        }

        for (int x = 0; x < n.Length; x++)
        {
            if (x > 0)
            {


                p = n[x - 1].ToString();
                q = n[x].ToString();
                r = p + "" + q;

                p = q;
                q = r[0].ToString();

                res += Convert.ToInt64(r);
            }
        }

        for(int x = 0; x < n.Length; x++)
        {
            if (n.Length > 2)
            {
                s += n[x];
            }
        }
        if (n.Length > 2)
        {
            return res + Convert.ToInt64(s);
        }
        else
        {
            return res;
        }
    }

这是我为生成子字符串编写的代码。这种逻辑不适用于大量数字

标签: c#c#-4.0

解决方案


您可以像这样创建扩展并使用产量:

static class StringExtensions
{
    public static IEnumerable<String> SplitInMultipleParts(this String s)
    {
        if (s == null)
            throw new ArgumentNullException("s");

        for (var p = 0; p < s.Length; p++)
        {
            for (var i = 0; i < s.Length - p; i++)
                yield return s.Substring(i, p + 1);
        }
    }
}

你叫它:

        string num = "123456789";
        var result = num.SplitInMultipleParts().Select(x => Convert.ToInt64(x));

你的结果是一个枚举int64,如果你想要列表,只需添加扩展名.ToList()

如果您不喜欢 Extension,我认为转换为简单方法对您来说不是问题...

public static IEnumerable<String> SplitInMultipleParts(String s)

ans call it : SplitInMultipleParts(num)

推荐阅读