首页 > 其他 > 详细

Objective-C之用C的字符来处理NSString相关的字符替换和拼接的问题

时间:2015-11-07 21:50:50      阅读:451      评论:0      收藏:0      [点我收藏+]

需求

使用Category给NSString类增加以下功能(需要用到的方法自己查资料或者猜)

1> 计算英文字母的个数(比如@"324fdsfk656HF99Jp"调用方法后返回的是9)
2> 字符串反转(比如@"abc"·   调用方法后返回@"cba")
3> 去除字符串两端空格(比如@"  jack rose "调用方法后返回@"jack rose")
4> 截取网站域名中www.和.com之间的字符串(比如@"http://www.baidu.com"调用方法返回@"baidu")

在直接看源代码之前,先大致讲讲该代码的有价值的地方:

1> 直接对NSString的替换字符或者移除字符的操作,都会重新开辟新的内存空间然后实例化NSString对象。

   这里采用C语言的字符来处理这些逻辑算法比较高效,避免了开辟比较大的内存。

   大概思路:NSString对象 -->  unchar  --> 相关的逻辑操作后 --> NSString对象

2> C语言指针字符数组不能直接动态的初始化长度,但是通过malloc是可以的。

源代码:

main.m

 1 #import <Foundation/Foundation.h>
 2 #import "NSString+calNum.h"
 3 
 4 int main(int argc, const char * argv[]) {
 5     @autoreleasepool {
 6         
 7         //测试1
 8         NSString *str1 = @"324fdsfk656HF99Jp";
 9         NSLog(@"%d",[str1 getNumCount]);
10         
11         //测试2
12         NSString* str2 = @"abc";
13         NSLog(@"%@",[str2 getRever]);
14         
15         //测试3
16         NSString* str3 = @" jack rose ";
17         NSLog(@"|%@|",[str3 removeSpace]);
18         
19         //测试4
20         NSString* str4 = @"http://www.baidu.com";
21         NSLog(@"%@",[str4 sub]);
22     }
23     return 0;
24 } 

NSString+calNum.h

 1 #import <Foundation/Foundation.h>
 2 
 3 @interface NSString (calNum)
 4 
 5 -(int)getNumCount;
 6 
 7 -(NSString *)getRever;
 8 //3> 去除字符串两端空格(比如@"  jack rose "调用方法后返回@"jack rose")
 9 -(NSString*)removeSpace;
10 
11 
12 //4> 截取网站域名中www.和.com之间的字符串(比如@"http://www.baidu.com"调用方法返回@"baidu")
13 -(NSString*)sub;
14 
15 
16 @end

NSString+calNum.m

 1 #import "NSString+calNum.h"
 2 
 3 @implementation NSString (calNum)
 4 
 5 -(int)getNumCount{
 6     int count = 0;
 7     int length = (int)[self length];
 8     
 9     for (int i = 0; i<length; i++) {
10         unichar c = [self characterAtIndex:i];
11         if (c>=0 && c<=9) {
12             count ++;
13         }
14     }
15     return count;
16     
17 }
18 
19 -(NSString *)getRever{
20         uint64_t  i = 0;
21         uint64_t j = self.length - 1;
22         //  unichar characters[self.length];
23         unichar *characters = malloc(sizeof([self characterAtIndex:0]) * self.length);
24         while (i < j) {
25             characters[j] = [self characterAtIndex:i];
26             characters[i] = [self characterAtIndex:j];
27             i ++;
28             j --;
29         }
30         if(i == j)
31             characters[i] = [self characterAtIndex:i];
32         return [NSString stringWithCharacters:characters length:self.length];
33 
34 }
35 
36 -(NSString *)removeSpace{
37     uint64_t length = [self length];
38     int len = 0;
39     unichar *character = malloc((sizeof([self characterAtIndex:0])*self.length));
40     unichar c ;
41     int i= 0;
42     while (i<length) {
43         c = [self characterAtIndex:i];
44         if (c!= ) {
45             character[len] = [self characterAtIndex:i];
46             len++;
47         }
48         i++;
49     }
50     
51     return [NSString stringWithCharacters:character length:len+1];
52 }
53 
54 //4> 截取网站域名中www.和.com之间的字符串(比如@"http://www.baidu.com"调用方法返回@"baidu")
55 -(NSString *)sub{
56     NSString* str = [[self substringFromIndex:11] substringToIndex:5];
57     
58     return str;
59 }
60 @end
 
 

Objective-C之用C的字符来处理NSString相关的字符替换和拼接的问题

原文:http://www.cnblogs.com/goodboy-heyang/p/4946000.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!