Working with strings 绕不开的字符串

在此之前,我们已经和 Swift 的 string 和 Objective-C 的 NSString 打了各种交道,现在我们要和 C 语言中的字符串再打一次交道,我想你已经见惯不惯了吧~。◕‿◕。

然而在 C 语言里,并没有 NSString 这个东西,只有字符数组。也就是说,当我们要用到 C 语言的字符串时,需要把它从字符数组转换成 NSString。

而创建方法也完全不一样,要用 scanf() 这个函数,具体的写法来看下面这段代码:

char cstring[256];
scanf("%s", cstring);

在这段代码中,初始化了一个字符数组。这个字符数组可以容纳255个字母和一个结尾的空字符。接着我们用 %s 读取字符数组。

scanf() 和 Swift 中的 readLine() 是不一样的,readLine() 的存在是为了提高代码的安全性,但是 scanf() 纯粹只是传入数据而已。

没有人想黑进这个游戏的,所以我们用 scanf() 就好啦。╮(╯▽╰)╭

当你创建好这个字符数组之后,你就可以把它转换成我们需要的 NSString 了:

NSString *input = [NSString stringWithCString:cstring
encoding:NSUTF8StringEncoding];

到此为止,你已经安全着陆在了 Objective-C 的大路上。如果你想反着来做,也就是说先创建一个 NSString ,然后用 cStringUsingEncoding 方法把它变成 C 语言的字符串的话,也是可以的,这里用到的具体方法是 NSUTF8StringEncoding:

[word cStringUsingEncoding:NSUTF8StringEncoding]

在这里,我们用了 Objective-C 的 NSString 和 C 语言的字符(char)。这里我们要引进一个很重要的类,就是 unichar。它是一个混血儿,有一半的 Objective-C 血统和一半的 C 语言血统,它可以在NSString 里用,用来表示字符串里的每一个字符。但是它并不是一个对象,不能把它放到数组里面去。

我们在这里用这个类是因为这是一个猜字游戏,需要用到单独的字母。如果我们想把字母从字符串里取出来,需要用到这个方法:

[someString characterAtIndex:position];

接下来要创建一个由单独的字母组成 NSString,你可以用 stringWithFormat 方法,然后用 %C 格式符,把它调整你想要的样式。

注意啦,一定要记住 unichar 并不是一个对象,所以我们一定要把它转换成 NSString,就像这样:

NSString *newString = [NSString stringWithFormat:@"%C", letter];

在这一步还有最后一件事情,就是 printf()。在此之前,我们一直在用 NSLog(),但其实 NSLog() 还是在 debug 的时候更常用,几乎没有人在 app 里用的。

在这个游戏里,我们只要把字母打印出来就好了,所以用 printf() 就好咯。

results matching ""

    No results matching ""