0

次の簡単な方法を使用して、 my から各文字/文字を表示し、 myが 14 文字未満のNSString場合はカウントし、配列から残りの文字を表示して、合計 14 文字にします。NSStringUnichar

サンプルコードは次のとおりです。

NSString *str = @"HELLO";

//unichar chrs [14] ={0,0,0,0,0,0,0,0,0,0,0,0,0,0}; // this works great, shows English chars

unichar chrs [14] ={L'б', L'в', L'г',L'д',L'ж',L'з',L'к',L'л',L'м',L'н',L'п',L'р',L'с',L'т'}; // doesnt work


for (int i = 0; i < str.length; i++) {

    int index = (arc4random() % 14);
    while (chrs[index] != 0)
    {
        index = (arc4random() % 14);
    }
    chrs[index] = [str characterAtIndex: i];
}
for (int i = 0; i < 14; i++) {
    if (chrs[i] == 0) chrs[i] = (arc4random() % 26) + 65;
}


for (int i = 0; i < 14; i++) {


    NSLog(@"%C", chrs[i]);
}

ご覧のとおり、コメント行が機能します。しかし、私の問題は、特定のロシア語の文字を含むunichar chrsです。

私は何を間違っていますか?コメントされている最初のunichar chrsが機能するのはなぜですか?しかし、キリル文字で宣言された文字を含むこのものは機能しません。

ありがとう

4

1 に答える 1

1

これはあなたが望むことだと思います(しかし、私はあなたの目標を100%確信していません):

NSString *str = @"HELLO";
unichar result[14] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0};
// "chrs" can have any number of letters as needed
unichar chrs[14] = {L'б', L'в', L'г',L'д',L'ж',L'з',L'к',L'л',L'м',L'н',L'п',L'р',L'с',L'т'};    

int resultLen = sizeof(result) / sizeof(unichar);
int chrsLen = sizeof(chrs) / sizeof(unichar);
// Scatter the letters from "str" through "result"
for (int i = 0; i < str.length; i++) {
    int index;
    do {
        index = arc4random_uniform(resultLen);
    } while (result[index] != 0);

    result[index] = [str characterAtIndex:i];
}

// Fill in the remaining open spots in "result" with random letters from "chrs"
for (int i = 0; i < resultLen; i++) {
    if (result[i] == 0) {
        result[i] = chrs[arc4random_uniform(chrsLen)];
    }
}

for (int i = 0; i < resultLen; i++) {
    NSLog(@"%C", result[i]);
}

このソリューションには 1 つの欠点があります。の余分なスポットを埋めるために、 の同じ文字chrsが複数回使用される可能性は十分にありresultます。これが問題になる場合は、さらにロジックが必要です。

于 2013-09-02T01:18:37.807 に答える