再加几个MQL4 中的字符串处理函数

前面文章 http://www.cnblogs.com/niniwzw/archive/2009/12/01/1614784.html 中的字符串处理函数有bug,请使用新版本的函数。

1. 已经把explode 函数改成动态内存分配了,只要你 这样定义buff就可以了 string buff[];

2. 新加了,implode 函数,把数组返回成字符串,和 explode 相反。

3. toLower 和 toUpper 是大小写转换的。

4. 本人的一点心得: 字符串处理因为会有很多特殊的情况,要写的完全没有bug,可能还是有点难度的。

explode 的函数,可以比较一下我原来的版本,会发现,有些bug不仔细测试,还可能很难发现。

5. 网上有很多这些版本的函数, 也可以下载下来看看,会发现bug 很多,很多脚本没有考虑中文的情况。

 

代码
/**
* 把一个字符串,切分到一个数组里面去,用于csv格式的解析
*/
int explode(string delimiter , string str, string &buff[])
{
    
int start = 0, index, i = 0, delimiter_len,  max  = 0, step = 20;
    delimiter_len 
= StringLen(delimiter);
    index 
= StringFind(str, delimiter, start);
    max 
= ArraySize(buff);
    
while (index != -1)
    {
        
if (i >= max) {
            max 
+= step;
            ArrayResize(buff, max);
        }
        
//Alert("index : " + index , "start : " + start);
        if (index - start > 0) {
            buff[i] 
= StringSubstr(str, start, index - start);
        } 
else {
            buff[i] 
= "";
        }
        start 
= index + delimiter_len;
        index 
= StringFind(str, delimiter, start);
        i
++;
    }
    
if (index == -1) {
        index 
= StringLen(str);
        
if (start < index) {
            
if (i >= max) {
                max 
+= 1;
                ArrayResize(buff, max);
            }
            buff[i] 
= StringSubstr(str, start, index - start);
        } 
else {
            
if (i > 0) i--;
        }
    }
    
return (i + 1);
}

/**
* 在一个字符串里面进行替换
*/
string str_replace(string search, string replace, string str)
{
    
int start = 0, index, i = 0, search_len, replace_len;
    search_len 
= StringLen(search);
    replace_len 
= StringLen(replace);
    index 
= StringFind(str, search, start);
    
while (index != -1
    {
        str 
= StringSubstr(str, start, index) + replace + StringSubstr(str, index + search_len);
        index 
= StringFind(str, search, index + replace_len);
    }
    
return (str);
}


string implode(string sDelimiter, string sImplode[]){
   
   
string slImplode = "";
   
for (int i = 0; i < ArraySize(sImplode); i++) {
      slImplode 
= StringConcatenate(slImplode, sImplode[i], sDelimiter);
   }
   
return(StringSubstr(slImplode, 0, (StringLen(slImplode) - StringLen(sDelimiter))));
}


string toLower(string sText) {
   
int i = 0, size;
   size 
= StringLen(sText);
   
while (i < size){
      
int ilChar = StringGetChar(sText, i);
      
if (ilChar >= 65 && ilChar <= 90) {
         sText 
= StringSetChar(sText, i, ilChar+32);
      }
      i
++;
   }
   
return(sText);
}

string toUpper(string sText){
   
   
int i = 0, size;
   size 
= StringLen(sText);
   
while (i < size){
      
int ilChar = StringGetChar(sText, i);
      Alert(ilChar);
      
if (ilChar >= 97 && ilChar <= 122) {
         sText 
= StringSetChar(sText, i, ilChar-32);
      }
      i
++;
   }
   
return(sText);
}

 

 

 

 

 

posted @ 2009-12-03 19:10  暮夏  阅读(1122)  评论(0编辑  收藏  举报