none
求 String.IndexOfAny(char[] anyOf, int startIndex, int count) 算法. RRS feed

  • 问题

  • 求 String.IndexOfAny(char[] anyOf, int startIndex, int count) 算法.

    如果可以的话.一起实现

    求 String.IndexOfAny(String[] anyOf, int startIndex, int count) 算法.

    • 已编辑 钱仔 2011年10月7日 18:12
    2011年10月7日 18:09

答案

  • 我为string写了扩展方法,请看:

    namespace nibian
    {
        public static class MyExtender
        {
            public static int MyIndexOfAny(this string str, char[] chars, int start, int length)
            {
     
                //实际的起始索引
                if (start <= 0)
                {
                    throw new Exception("索引必须至少从1开始");
                }
                else
                {
                    //实际读取的长度
                    if (str.Length - start + 1 < length)
                    {
                        length = str.Length - start + 1;
                    }
     
     
                    foreach (char c in chars)
                    {
                        for (int i = start-1; i < length; i++)
                        {
                            if (str[i] == c)
                            {
                                return i - 1;
                            }
                        }
                    }
     
                    return -1;
                }
     
            }
     
            public static int MyIndexOfAny(this string str, string[] strings, int start, int length)
            {
     
                //实际的起始索引
                if (start <= 0)
                {
                    throw new Exception("索引必须至少从1开始");
                }
                else
                {
                    //实际读取的长度
                    if (str.Length - start + 1 < length)
                    {
                        length = str.Length - start + 1;
                    }
     
                    str = str.Substring(start-1, length);
     
                    foreach (string s in strings)
                    {
                        if (str.IndexOf(s) >= 0)
                        {
                            return str.IndexOf(s);
                        }
                    }
     
                    return -1;
                }
     
            }
        }
        public class MainTest
        {
            static void Main(string[] args)
            {
                string s = "abcdefg";
                Console.WriteLine(s.MyIndexOfAny(new char[] { 'd''c' }, 2, 10));
                Console.WriteLine(s.MyIndexOfAny(new string[]{"cde"},2,10));
            }
        }
    }

     


    如果你有其它意见或私下交流,请直接发送maledong_work@foxmail.com;或者讨论(Talk)
    If you do not have QQ, please open the page and download it and click the image to talk or leave message for me.
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    • 已标记为答案 钱仔 2011年10月8日 22:46
    2011年10月8日 4:51
    版主

全部回复

  • 我为string写了扩展方法,请看:

    namespace nibian
    {
        public static class MyExtender
        {
            public static int MyIndexOfAny(this string str, char[] chars, int start, int length)
            {
     
                //实际的起始索引
                if (start <= 0)
                {
                    throw new Exception("索引必须至少从1开始");
                }
                else
                {
                    //实际读取的长度
                    if (str.Length - start + 1 < length)
                    {
                        length = str.Length - start + 1;
                    }
     
     
                    foreach (char c in chars)
                    {
                        for (int i = start-1; i < length; i++)
                        {
                            if (str[i] == c)
                            {
                                return i - 1;
                            }
                        }
                    }
     
                    return -1;
                }
     
            }
     
            public static int MyIndexOfAny(this string str, string[] strings, int start, int length)
            {
     
                //实际的起始索引
                if (start <= 0)
                {
                    throw new Exception("索引必须至少从1开始");
                }
                else
                {
                    //实际读取的长度
                    if (str.Length - start + 1 < length)
                    {
                        length = str.Length - start + 1;
                    }
     
                    str = str.Substring(start-1, length);
     
                    foreach (string s in strings)
                    {
                        if (str.IndexOf(s) >= 0)
                        {
                            return str.IndexOf(s);
                        }
                    }
     
                    return -1;
                }
     
            }
        }
        public class MainTest
        {
            static void Main(string[] args)
            {
                string s = "abcdefg";
                Console.WriteLine(s.MyIndexOfAny(new char[] { 'd''c' }, 2, 10));
                Console.WriteLine(s.MyIndexOfAny(new string[]{"cde"},2,10));
            }
        }
    }

     


    如果你有其它意见或私下交流,请直接发送maledong_work@foxmail.com;或者讨论(Talk)
    If you do not have QQ, please open the page and download it and click the image to talk or leave message for me.
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    • 已标记为答案 钱仔 2011年10月8日 22:46
    2011年10月8日 4:51
    版主
  • Thanks you
    2011年10月8日 22:46