【问题标题】:two simple string operation in objective-c (shift operating and iterating)Objective-c 中的两个简单字符串操作(移位操作和迭代)
【发布时间】:2011-10-23 17:41:10
【问题描述】:

我想在 obj-c 中操作 NSString,这就是我想做的:

通过 for-each / for 循环迭代字符串并左移 (

我是 Objective-c 的新手。

问候

【问题讨论】:

  • C 或 Objective-C 中的字符串没有移位运算符。你想完成什么?
  • 我回答了如何遍历字符。请说明您需要的<< 步骤。
  • 为什么需要换字符? overall goal 是什么?
  • 我想使用移位运算符创建一个简单的加密 > 是否有可能将 chars 转换为 int 然后移位然后在 obj-c 中恢复为 char?
  • @Austin:使用谷歌。 Apple 的文档是唯一确定的文档,尽管CocoaDev 有更多信息。至于保护数据,您不应该实施自己的加密方案,除非您真的、真的、真的知道自己在做什么。很容易出错。而是搜索existing encryption libraries

标签: objective-c nsstring


【解决方案1】:

代码:

NSString * string = @"Anne";
int length = [string length];
for(int index = 0; index < length; index++) {
    unichar character = [string characterAtIndex:index];
    NSLog(@"%C",character);
}

输出:

A
n
n
e

【讨论】:

    【解决方案2】:

    NSStrings 是不可变的; mutableCopyWithZone: 会给你一个 (implicitly retained) NSMutableString。但是,NSMutableString 没有设置单个字符的方法。使用多种方法之一获取字符数组会更容易(例如,getCharacters:range: 用于宽字符,cStringUsingEncoding:getCString:maxLength:encoding:UTF8String 用于 c 样式字符串),然后对其进行操作(注意一些方法返回 const 字符串),然后使用(例如)initWithCString:encoding: 构造一个新字符串。请记住,根据您的 trying to accomplish,由于编码问题和多字节字符,移位字节可能不会给您预期的结果。

    您可以使用length 获取字符串的长度,它是字符串中的字符数(也是用于保存 UTF-16 数据的缓冲区的大小,以 unichars 为单位,不包括空终止符) ,或lengthOfBytesUsingEncoding:,它将告诉您缓冲区保存字符串内容(不包括空终止符)所需的大小(字节数)。 maximumLengthOfBytesUsingEncoding: 也可用于缓冲区大小,尽管它可能大于实际所需的大小。对于可变长度编码,最大大小是可能的最大字符大小(例如,对于 UTF-8 编码的 unichars 为 3)乘以字符数。

    循环和移位与 C 中的其他方面相同:将索引变量初始化为下限 (0) 并循环直到索引变量超过上限。

    NSUInteger i;
    NSString *result=nil;
    unichar *data;
    NSRange dataRange = {0,0};
    dataRange.length = [string length];
    if ((data = malloc(dataRange.length * sizeof(unichar)))) {
        [string getCharacters:data range:dataRange];
        for (i=0; i < dataRange.length; ++i) {
            // shiftAmount is declared elsewhere
            data[i] <<= shiftAmount;
        }
        result = [[NSString alloc] initWithCharacters:data length:dataRange.length];
    } else {
        // malloc() failed; handle error
        ...
    }
    

    如果数据不是字符串数据而是字节,NSData/NSMutableData会更合适。

    【讨论】:

      猜你喜欢
      • 2015-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-08
      • 1970-01-01
      相关资源
      最近更新 更多