zoukankan      html  css  js  c++  java
  • 字符串搜索的Sunday算法

    public class SUNDAY
        
    {
            
    public SUNDAY()
            
    {
              
    //
              
    // TODO: 在此处添加构造函数逻辑
              
    //
            }


            
    public int QfindChr(string str, string Sfind)
            
    {
                
    int str_length = 0;
                
    int fin_length = 0;

                
    int find_count = 0;
                
    int start = 0;
                
    int moveNum = 0;

                
    if (str.Length < Sfind.Length)
                
    {
                    
    return find_count;
                }


                str_length 
    = str.Length;
                fin_length 
    = Sfind.Length;

                
    while (start + fin_length <= str_length)
                
    {
                    moveNum
    ++;
                    
    bool isfind = false;//是否在这次移动中找到
                    string s_temp = str.Substring(start, fin_length);
                    
    if (s_temp == Sfind)
                    
    { find_count++; start = start + fin_length; isfind = true; }
                    
    if (isfind == false)//如果没找到计算下次移动位置
                    {
                        
    int forwardPos = QfindPos(str, Sfind, start, fin_length);
                        start 
    = forwardPos;
                    }

                }

                
    return find_count;
            }


            
    //找字符在字符串(不算最后一个字符)的位置(倒数)
            
    //没找到返回fin_length,找到返回位置
            /// <summary>
            
    /// 找字符在字符串(不算最后一个字符)的位置(倒数);没找到返回str.length,找到返回位置
            
    /// </summary>
            
    /// <param name="str"></param>
            
    /// <param name="find"></param>
            
    /// <param name="pos"></param>
            
    /// <param name="fin_length"></param>
            
    /// <returns></returns>

            public int QfindPos(string str, string find, int pos, int fin_length)
            
    {
                
    int returnPos = str.Length;
                
    char[] Schr = str.ToCharArray();
                
    char[] Sfin = find.ToCharArray();
                
    if ((pos + fin_length) < str.Length)
                
    {
                    
    char chrFind = Schr[pos + fin_length];//要找的字符
                    if (fin_length >= 1)
                    
    {
                        
    if (find.LastIndexOf(chrFind) > -1)
                        
    {
                            returnPos 
    = pos + fin_length - find.LastIndexOf(chrFind);
                        }

                        
    else
                        
    {
                            returnPos 
    = pos + fin_length + 1;
                        }

                    }

                }

                
    return returnPos;
            }

    }

  • 相关阅读:
    [公告]Google个性化主页可以正常阅读博客园的RSS了
    致歉
    [公告]网站程序已经升级到ASP.NET 2.0
    GTF: Great Teacher Friedman
    Node.js : exports と module.exports の違い
    拨开历史的迷雾从篡夺者战争到五王之战的政经原因
    javascript模板系统 ejs v10
    window.name + postMessage实现不用代理页的跨域通信
    node.js Domain 時代のエラー処理のコーディングパターン
    鲜为人知的get,set操作符
  • 原文地址:https://www.cnblogs.com/Safe3/p/1409011.html
Copyright © 2011-2022 走看看