我使用以下简单方法显示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 被评论有效,但这个用西里尔语声明的字母不起作用。
由于
答案 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
中的额外字符。如果这是一个问题,则需要更多逻辑。