Код:
//+------------------------------------------------------------------+
//|                                                    StringLib.mq4 |
//+------------------------------------------------------------------+
#property library

/**
 *  Returns a new string resulting from replacing all occurrences of 
 *  toFind in this string with toReplace.
 */
string stringReplaceAll(string str, string toFind, string toReplace) {
    int len = StringLen(toFind);
    int pos;
    string leftPart, rightPart, result = str;
    while (true) {
        pos = StringFind(result, toFind);
        if (pos == -1) {
            break;
        }
        if (pos == 0) {
            leftPart = "";
        } else {
            leftPart = StringSubstr(result, 0, pos);
        }
        rightPart = StringSubstr(result, pos + len); 
        result = leftPart + toReplace + rightPart;
    }    
    return (result);
}

/**
 *  Replaces the first substring of this string that matches toFind 
 *  with toReplace.
 */
string stringReplaceFirst(string str, string toFind, string toReplace) {
    int len = StringLen(toFind);
    int pos = StringFind(str, toFind);
    if (pos == -1) {
        return (str);
    } else if (pos == 0) {
        return (toReplace + StringSubstr(str, pos + len));
    }
    return (StringSubstr(str, 0, pos) + toReplace + StringSubstr(str, pos + len));
}

/**
 *  Splits input string into output array around given token.
 */
void stringSplit(string& output[], string input, string token) {
    int pos, size;
    ArrayResize(output, 0);
    while (true) {
        pos = StringFind(input, token);
        size = ArraySize(output);
        ArrayResize(output, size + 1);
        if (pos != -1) {
            if (pos > 0) {
                output[size] = StringSubstr(input, 0, pos);
            } else {
                output[size] = "";
            }
            input = StringSubstr(input, pos + 1);
        } else {
            output[size] = input;
            break;
        }        
    }
}

/**
 *  Returns a copy of the string, with leading and trailing whitespace omitted.
 */
string stringTrim(string str) {
    return (StringTrimRight(StringTrimLeft(str)));
}

/**
 *  Tests if given string starts with the specified prefix.
 */
bool stringStartsWith(string str, string prefix) {
    return (StringFind(str, prefix) == 0);
}

/**
 *  Tests if given string ends with the specified suffix.
 */
bool stringEndsWith(string str, string suffix) {
    int start = StringLen(str) - StringLen(suffix);
    return (StringFind(str, suffix, start) == start);
}

/**
 *   Converts all of the characters in the given string to lower case.
 */
string stringToLowerCase(string str) {
    for (int i = 0; i < StringLen(str); i++) {
        int code = StringGetChar(str, i);
        if (code >= 65 && code <= 90) {
            code += 32;
            str = StringSetChar(str, i, code);
        }
    }
    return (str);
}

/**
 *  Converts all of the characters in the given string to upper case.
 */
string stringToUpperCase(string str) {
    for (int i = 0; i < StringLen(str); i++) {
        int code = StringGetChar(str, i);
        if (code >= 97 && code <= 122) {
            code -= 32;
            str = StringSetChar(str, i, code);
        }
    }
    return (str);
}

/**
 *  Compares one string to another string, ignoring case considerations.
 */
bool stringEqualsIgnoreCase(string str1, string str2) {
    return (stringToLowerCase(str1) == stringToLowerCase(str2));
}