LSL汎用関数 その1

れむ

2008年03月28日 14:56


文字列関連です。
//==============================================================================
//  文字列を置換します。
//  source      対象の文字列
//  search      置換される文字列
//  replace     置換する文字列
//  戻り値      置換されたを返します。
//==============================================================================
string str_replace(string source, string search, string replace)
{
    integer len = llStringLength(search);
    integer index = llSubStringIndex(source, search);
    while (index >= 0) {
        source = llDeleteSubString(source, index, -1) + replace
                + llDeleteSubString(source, 0, index + len - 1);
        index = llSubStringIndex(source, search);
    }
    return source;
}


【使用方法】
string str = str_replace("0123456789", "123", "zzz");      // str = "0zzz456789"
string str = str_replace("0123401234", "123", "zzz");      // str = "0zzz40zzz4"


//==============================================================================
//  文字列を反復します。
//  str         繰り返す文字列
//  count       繰り返す回数
//  戻り値      繰り返した文字列を返します。
//==============================================================================
string str_repeat(string str, integer count)
{
    string s = "";
    integer i;
    for (i = 0; i < count; i=-(~i)) {
        s += str;
    }
    return s;
}

// 件数が増えても高速
string str_repeat(string str, integer count)
{
    string s1;
    string s2 = "";
    integer i;
    while (count) {
        s1 = str;
        i = 0;
        while (count >> (i=-(~i))) {
            s1 += s1;
        }
        count -= (1 = 0; i=~(-i)) {
        s += llGetSubString(str, i, i);
    }
    return s;
}

// メモリ節約版
string str_reverse(string str)
{
    integer len = llStringLength(str);
    integer i;
    for (i = len - 2; i >= 0; i=~(-i)) {
        str = llDeleteSubString(str, i, i) + llGetSubString(str, i, i);
    }
    return str;
}


【使用方法】
string str = str_reverse("01234");     // str = "43210"


//==============================================================================
//  大文字小文字を区別しない文字列比較を行います。
//  str1        文字列1
//  str2        文字列2
//  戻り値      等しい場合はTRUEを返します。
//==============================================================================
integer str_case_equal(string str1, string str2)
{
    return llToLower(str1) == llToLower(str2);
}


【使用方法】
integer result = str_case_equal("abc", "abc");       // result = TRUE
integer result = str_case_equal("aBC", "AbC");       // result = TRUE


Tips