`
orange.lpai
  • 浏览: 89551 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

字符串处理心得 String Process(1)

阅读更多
字符串表示方法:
Char *
Char[]
string
String
Wchar
字符串需要实现类的方法:
默认构造函数
析构函数
拷贝构造函数
赋值函数
其他辅助函数
1.字符串与整形之间的转换:
要求不调用库函数atoi(),atio()
int str2int(const char *str)
 {   
  int i=0, sign=1, value = 0;
  if(str==NULL)  return NULL;    // 空串直接返回 NULL 
  if(str[0]=='-' || str[0]=='+') 
{   // 判断是否存在符号位  
 i = 1;   
 sign = (str[0]=='-' ? -1 : 1);
 } 
 for(; str>='0' && str<='9'; i++) // 如果是数字,则继续转换 
  value = value * 10 + (str - '0'); 
 return sign * value;}

2.字符串逆序高效算法:
char * strrev ( char * str)
{    char *start = str;    
char *left = str;    
char ch;    
while (*str++) ;
   str-= 2;   
 while (left < str)    
{        ch = *left;      
         *left++ = *str;        
         *str-- = ch;   
 }    
return(start);
}
3.字符串频度算法:
性能较好的算法BF算法,KMP算法,BM算法
BM算法基本思想:假设模式的长度为m,令模式和文本左对齐,对模式中的最右一个字符pm 和文本中对应字符tm比较,不匹配,则向后移动m个字符。
文本:  defghigabc
模式:  abc
移动后:    abc
public int get_freq(string soure,string astr)
       {
           if (astr.Trim() == "")
               return -1;
            int freq = 0;
            int soure_len = soure.Length; int astr_len = astr.Length;int ind = 0;
            while (ind < soure_len)
            {
                if (soure[ind] == astr[0])//定位第一个字符
                {
                    if (ind + astr_len <= soure_len)
                    {
                        int j = 1;
                        while (j < astr_len)
                        {
                            if (soure[ind + j] == astr[j])
                                j++;
                            else
                                break;
                        }
                        if (j >= astr_len)
                            freq++;
                    }
                }
                ind++;
            }//end while ind
            return freq;
       }//end get_freq

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics