具有特定字符的unichar characterAtIndex

时间:2013-09-02 00:24:40

标签: ios objective-c

我使用以下简单方法显示NSString中的每个字母/字符,并计算我的NSString少于14个字母,然后显示来自Unichar数组的其余字母,总共14个字母。

以下是示例代码:

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 被评论有效,但这个用西里尔语声明的字母不起作用。

由于

1 个答案:

答案 0 :(得分: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]);
}

此解决方案存在一个缺陷。 chrs中的相同字符很可能不止一次用于填充result中的额外字符。如果这是一个问题,则需要更多逻辑。