想必学过OC的同学一开始对oc中的语法形式感觉很无语,但是在学习的过程中除了这些最基本的语法要注意,还有一点一定要清楚,那就是oc的思想,学会了oc的思想,我们才会上手很快,学的扎实。
好了,废话不多说了,今天刚好闲着,就把我认为oc中需要注意的一些点记录下来吧,望共勉!
首先说说oc中的最基本的数据类型吧!
NSString 的使用
NSString是oc中的字符串,它是一个类,既然是一个类,那么里面有很多我们可以用的方法来帮助我们对字符串来进行处理与使用。比如字符串的分割,字符串的拼接,字符串的查找,字符串的大小写转换等等,这些都是我们经常用到的。下面就用代码来看看这些功能是怎么实现的吧!
- (NSRange)rangeOfString:(NSString *)aString;
查找字串在父串中的位置返回
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSString *str = @"北京欢迎你";
NSRange rang = [str rangeOfString:@"你"];
//rang是一个结构体,里面有两个成员变量,一个是location,是用来记录查找到得字符串的首位置,另一个是length是用来记录字符串的长度的。
if(rang.location == NSNotFound){
NSLog(@"没有找到");
}else{
NSLog(@"%lu %lu",rang.location,rang.length);
}
}
return 0;
}
字符串初始化的一些常见方法(包括一些类方法),如下代码:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSString *str = @"我是一个OC的初学者!"; //告诉编辑器,创建一个字符串对象,@"我是一个OC的初学者!"是一个字符串对象的指针
//@"%@" 打印对象
NSLog(@"%@",str);
NSString *str2 = [[NSString alloc]initWithString:str]; //用一个字符串创建另外一个字符串
NSLog(@"%@",str2);
NSString *str3 = [[NSString alloc]initWithUTF8String:"sdddfacc"]; //把c语言字符串转成OC字符串
NSLog(@"%@",str3);
NSString *str4 = [[NSString alloc]initWithFormat:@"%d---%c",44,'A']; //使用格式,创建字符串,可以输出预先不知道的字符串
NSLog(@"%@",str4);
//每个init方法,都对应一个stringWith的类方法
//以下方法都是类方法
NSString *str5 = [NSString stringWithString:str];
NSLog(@"%@",str5);
NSString *str6 = [NSString stringWithUTF8String:"类方法"]; //将c语言字符串转成oc字符串
NSLog(@"%@",str6);
NSString *str7 = [NSString stringWithFormat:@"%c",'l'];
NSLog(@"%@",str7);
}
return 0;
}
字符串的一些基本操作:
1.字符串的长度
2.字符串的比较
3.返回字符串中的某个单个字母
4.字符串的大小的比较
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
//1.字符串的长度
NSString *str = @"abcd";
NSString *str2 = @"abcdefg";
NSUInteger length = [str length];
//2.返回单个字母 字符串是从零开始的
unichar c =[str characterAtIndex:3];
NSLog(@"%c",c);
//3.字符串的比较
if([str isEqualToString:str2]){
NSLog(@"登陆成功!");
}else{
NSLog(@"登陆失败!");
}
//4.字符串的大小的比较
NSComparisonResult rect = [str compare:str2];
if(rect == NSOrderedAscending){
NSLog(@"右边大");
}else if(rect == NSOrderedDescending){
NSLog(@"左边大");
}else if(rect == NSOrderedSame){
NSLog(@"相等");
}
}
return 0;
}
字符串的拼接
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSString *str1 = @"hello";
NSString *str2 = @"world";
NSString *str3 = [[NSString alloc]initWithFormat:@"%@ %@",str1,str2];
NSLog(@"%@",str3);
}
return 0;
}
字符串的提取
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
NSString *str1 = @"123456789";
//从我们的字符串中截取从0-4(共五个字符)
NSString *sub1 = [str1 substringToIndex:5];
NSLog(@"%@",sub1);
//从第五个开始截取到最后一个(不包括5)
NSString *sub2 = [str1 substringFromIndex:5];
NSLog(@"%@",sub2);
//从5截取3个长度
NSRange range = {5,3};
NSString *sub3 = [str1 substringWithRange:range];
NSLog(@"%@",sub3);
}
return 0;
}
字符加法
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
char buf1[20];
char buf2[20];
NSLog(@"Please enter two string:");
scanf("%s%s",buf1,buf2);
double result = [[[NSString alloc]initWithUTF8String:buf1] doubleValue]+[[[NSString alloc]initWithUTF8String:buf2] doubleValue];
NSLog(@"%@",[NSString stringWithFormat:@"%f",result]);
}
return 0;
}
NSMutableString的使用,NSMUtableString是oc中的可变字符串,因为它是可变的,所以我们动态的处理一个字符串的时候,会使用它来进行操作。以下是具体使用代码:
#define SHOW(a) NSLog(@"%@",a);
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
//初始化可变字符串
NSMutableString *str = [[NSMutableString alloc]init];
//设置可变字符串
[str setString:@"addg"];
NSLog(@"%@",str);
SHOW(str);
//增加字符串内容
[str appendString:@"dsaf"];
[str appendFormat:@"%d %c% .2f",34,'T',2.34];
[str insertString:@"ABC" atIndex:3];
//删除字符串
[str deleteCharactersInRange:NSMakeRange(2, 3)];
//修改字符串
[str replaceCharactersInRange:NSMakeRange(2, 4) withString:@"lee"];
//查找字符串
NSRange range = [str rangeOfString:@"add"];
// NSMutableString *strlm = @"dafgal"; 除了此方法其他的类似NSString方法大致相同 该方法错误
}
return 0;
}
动态字符串的分割与拼接
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
NSString *str = @"yes,i am a so bad man";
//分割字符串中的字符
NSArray *subString = [str componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@", "]];
NSLog(@"%@",subString);
//拼接字符串中的字符
NSString *str1 = [subString componentsJoinedByString:@"*"];
NSLog(@"%@",str1);
}
return 0;
}
字符串的逆序输出
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSString *str = @"hello";
NSLog(@"Hello, World!");
//可变的一般以m字开头
NSMutableString *mstr = [[NSMutableString alloc]init];
for(int i=(int)[str length]-1;i>=0;i--){
unichar c = [str characterAtIndex:i];
[mstr appendFormat:@"%C",c];
}
//[mstr setString:@"hello"];
NSLog(@"%@",mstr);
}
return 0;
}
好了,字符串的一些操作就到此了,学习的时候光看是不行的,如果你此时此刻正在自学的话,建议最好全部敲一遍代码,然后做一些题目,这样就把字符串的一些常用操作记在心中了,接下来,我提供一些习题吧,巩固字符串的练习:
1.将可变字符串@"When I was young, I loved a girl in neighbor class."中,从young提取到girl。替换成@"a teacher, I rather to teach student "。
2.从字符串@"Welcome to Bejing!",中查找Beijing的范围。
3.从字符串@"Welcome to Bejing!", 中提取第3到第10个字符,生成字符串。
4.将字符串@"When I was young, I loved a girl in neighbor class."中,从young提取到girl。但是不许数。
5.将任意输入的数字,转换成字符串。
如 125 ---》 @"125" scanf
6.将两个字符串
NSString * str1 = @"123";
NSString * str2 = @"abc";
拼接成一个完整的字符串。
7.不使用initWithUTF8String:将任意输入的C字符串,转成OC字符串。
8.在字符串@"price:"后面追加一个从终端输入的任意浮点数,生成新字符串。要求保留两位小数。
9.
编写一个分数类:
@interface Fraction : NSObject {
int _numerator; //分子
int _denominator; // 分母
}
//初始化方法
- (id)initWithNumerator:(int)numerator andDenominator:(int)denominator;
//setter方法
- (void) setNumerator:(int)newNumerator;
- (void) setDenominator:(int)newDenominator;
//getter方法
- (int) numerator;
- (int) denominator;
// 同时设置分子 分母
- (void) setNumerator:(int)newNumerator andDenominator:(int)newDenominator;
// 当前分数 + fraction2 (包含 + - * /)
- (void) addFraction:(Fraction *)fraction2;
- (void) subFraction:(Fraction *)fraction2;
- (void) mulFraction:(Fraction *)fraction2;
- (void) divFraction:(Fraction *)fraction2;
// 约分
- (void) reductionOfFraction;
//打印分数
- (void) printFraction;
1/2
@end
//辗转相除法求最大公约数
- (void) reductionOfFraction{
int min,max;
_numerator>_denominator?max:min;
while(min!=0){
int temp = min;
min = max%min;
max = temp;
}
max = 最大公约数;
}