2

我正在学习 Objective C 和 iOS 开发。我正在尝试重新创建我们在 Java 类中所做的一些项目(我知道它们完全不同),但我在其中一个项目中遇到了麻烦。有一天我们在实验室做凯撒轮班。字符串操作实验室。这在 Java 中是一个非常基本的交易……一个 for 循环遍历字符串并更改每个字符。我似乎找不到任何方法来更改目标 C 中的单个字符。我查看了 NSMutableString 文档和 NSString 文档,我知道我可以做一个

[NSString stringByReplacingCharactersInRange:(NSRange *) withString:(NSString *)

但这并没有真正的帮助,因为我不知道我将要替换什么。我需要找到一种方法来获取特定索引处的字符并进行更改。有任何想法吗?

4

2 回答 2

2

听起来你正在寻找[NSString characterAtIndex:(NSUInteger)]方法

例如

NSString *string = @"abcde";
NSString *character = [NSString stringWithFormat:@"%C",[string characterAtIndex: 0]];
NSLog(@"%@", character);

结果:一个

使用 this 和 an NSMutableString,您可以构建所需的字符串。

使用appendString您可以添加到末尾NSMutableString

于 2012-06-19T00:29:05.660 回答
1

可能最好的方法是使用一个好的旧 C 字符串,因为它允许您更改字节而无需每次重新分配不同字符串的开销:

NSString *ceasarShift(NSString *input)
{
    char *UTF8Str = strdup([input UTF8String]);

    int length = [input length];
    for (int i = 0; i < length; i++)
    {
         UTF8Str[i] = changeValueOf(UTF8Str[i]); // some code here to change the value
    }

    NSString *result = [NSString stringWithUTF8String:UTF8Str];
    free(UTF8Str);

    return result;
}

这减少了开销,虽然您必须在完成后释放分配的数据,但它为您提供了不依赖高级 API 的优势,从而大大提高了性能。(数组集和动态方法查找之间的差异约为 5 个 CPU 周期,如果您正在执行任何主要类型的加密,这意味着很多)

也许也可以寻找NSMutableData这种任务,而不是NSString,因为随机\0可能会出现在结果字符串中。

于 2012-06-19T00:52:23.467 回答