6, #import <Foundation/Foundation.h> // 6、 创建一个NSDictionary对象,随便往里面添加内容,然后通过代码产生可变和不可变副本,这些复制是深复制还是浅复制?(Objective-C)
int main(int argc, const char * argv[]) { @autoreleasepool {
NSDictionary *dict=[NSDictionary dictionaryWithObject:@"zhangsan" forKey:@"zs"]; NSLog(@"dict=%p",dict);
//这是浅复制 NSMutableDictionary *dictCopy1=[dict copy]; //因为是浅复制,所以copy后的对象不能修改 ,这句代码执行会报错 // [dictCopy1 setValue:@"wangwu" forKey:@"wu" ]; NSLog(@"dictCopy1=%p",dictCopy1);
//这是深复制 NSMutableDictionary *dictCopy2=[dict mutableCopy]; //深复制,copy后对象可以修改 执行成功! [dictCopy2 setValue:@"wangwu" forKey:@"wu"]; NSLog(@"%@",dictCopy2); NSLog(@"%p",dictCopy2);
} return 0; }
7, #import <Foundation/Foundation.h> //7、 现有如下定义的字符串: NSString * str=@“iphoneAndroid”,能不能对该字符串进行修改,如果能,请输出删除Android后的新字符串。(Objective-C)
int main(int argc, const char * argv[]) { @autoreleasepool {
/*思路:原本 NSString * str=@“iphoneAndroid”是不可变字符串,不能被修改, 最简单的方法直接截取字符串即可。也可借用copy深复制后修改或将其转换为可变字符串修改或者借用可变字符串*/
//方法一 NSString * str=@"iphoneAndroid"; //从头开始截取6个字符字符串 NSString *subString=[str substringToIndex:6]; str=subString; NSLog(@"str=%@",str);
//方法二
NSString * str1=@"iphoneAndroid"; //将str放入可变字符串 NSMutableString *strNew=[NSMutableString stringWithFormat:@"%@",str1]; //查找子字符串位置 注意:结构体不能加*号! NSRange range=[strNew rangeOfString:@"Android"]; //根据查找到的索引删除字符串内容 [strNew deleteCharactersInRange:range]; //将删除后的字符串赋值给原字符串 str1=strNew; NSLog(@"str1=%@",str1);
//方法三 NSString * str2=@"iphoneAndroid"; NSMutableString *strNew2=[str2 mutableCopy]; NSRange r=NSMakeRange(6, 7); [strNew2 deleteCharactersInRange:r]; NSLog(@"str2=%@",strNew2);
} return 0; }
8, #import <Foundation/Foundation.h> //8、 利用分类给NSString扩展3个方法(Objective-C) //1> 字符串反转(比如@”123”调用方法后返回@”321”) //2> 计算英文字母的个数(比如@”5435abc54abc3AHJ5”调用方法后返回的是9) //3> 去除字符串两端空格(比如@” 1235 45 ”调用方法后返回@”1235 45”)
#import "NSString+Extension.h" int main(int argc, const char * argv[]) { @autoreleasepool { //1,字符串反转 NSString *str=[[NSString alloc]init]; str=[str CharacterInversion:@"12345"]; NSLog(@"%@",str); //2,计算英文字母的个数 NSString *str2=@"5435abc54abc3AHJ5"; NSInteger i=[str2 EnglishCount:str2]; NSLog(@"%li",i); //3,去除字符串两端空格 NSString *str3=@" 1235 45 "; str3=[str3 clearSpace:str3]; NSLog(@"%@",str3);
} return 0; } @interface NSString (Extension) //声明字符反转方法 -(NSString *)CharacterInversion:(NSString *)str;
//计算英文字母方法 -(NSInteger)EnglishCount:(NSString *)str;
//去除字符串两端空格方法 -(NSString *)clearSpace:(NSString *)str; @end
#import "NSString+Extension.h"
@implementation NSString (Extension)
//字符反转方法 -(NSString *)CharacterInversion:(NSString *)str{
//创建可变数组存放结果 NSMutableArray *array=[NSMutableArray array];
NSString *strNew; //注意characterAtIndex:是从0开始计算的因此这里长度要减1 for (NSInteger i=str.length-1; i>=0; i--) {
//将循环到的每个字符转换成oc字符 strNew=[NSString stringWithFormat:@"%c",[str characterAtIndex:i]]; //将字符累加到数组 [array addObject:strNew];
} //将数组转换成字符串 用空格隔开 return [array componentsJoinedByString:@" "];
}
//计算英文字母方法 -(NSInteger)EnglishCount:(NSString *)str{
char c; NSInteger count=0; for (NSInteger i=0;i<str.length;i++) { //循环取出每个字符 c=[str characterAtIndex:i]; //判断是否是字母 是count累加 if ((c >='a' && c<='z')|| (c >='A' && c<='Z')) { count++;
}
}
return count;
}
//去除字符串两端空格方法 -(NSString *)clearSpace:(NSString *)str{
//因为要去除空格因此将字符串装换为可变字符串 NSMutableString *str1 = [[NSMutableString alloc] initWithString:str]; //字符串不能是单个空格 if (![str isEqual:@" "]) {
//循环判断第一个字符是否是空格 while ([str1 characterAtIndex:0] == ' ') { //从开始位置删除1个字符 [str1 deleteCharactersInRange:NSMakeRange(0, 1)]; }
while ( [str1 characterAtIndex:([ str1 length]-1) ] == ' ') { [str1 deleteCharactersInRange:NSMakeRange(([str1 length]-1), 1)]; }
}
return str1;
} @end
|