IOS-OC-字符串.可变字符串案列和切割字符串

一:NSString 初认识

+ (void)test
{
    // 第一种字符串的初始化
   // NSString *str1 = @"前锋";
    
    // 第二种(重点)字符串的拼接
    NSString *str2 = [[NSString alloc] initWithFormat:@"%d钱%c枫 %@",2,'B',@"😄"];
 
    for (int i = 0; i < 10; i ++) {
        NSString *printfStr = [[NSString alloc] initWithFormat:@"我是第%d个字符",i];
        NSLog(@"%@",printfStr);
    }
    
    
   
   /* // 第三种 (把c的字符串转成oc字符串)
    NSString *str3 = [[NSString alloc] initWithUTF8String:"铅封"];
    const char * p = [@"aoeiuv" UTF8String];
   */
 
   /* // 第四种 (用一个字符串创建另一个字符串)
    NSString *str = [[NSString alloc] initWithString:str1];
    
    
    // 每一个init方法都对应一个类方法
    NSString *str22 = [NSString stringWithFormat:@"少年郎"];
    
    NSString *str33 = [NSString stringWithUTF8String:"我给你讲"];
    
    NSString *str44 = [NSString stringWithString:str1];
    */
    NSLog(@"%@",str2);
}
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        // 1. 把大写转成小写
        NSString *engW = [@"ABCD" lowercaseString];
        
        // 2. 小写转成大写
         NSString *engG = [@"cdesf" uppercaseString];
        
        // 3.转成首字母大写
         NSString *engF = [@"fadsfadsfdsa" capitalizedString];
       
        // 判断字符串是不是以某个字符串开头
        [@"hello,nihao" hasPrefix:@"hello"];
        
        // 判断字符串是不是以某个字符串结尾
        [@"hello,nihao" hasSuffix:@"nihao"];
    }
    return 0;
}

+ (void)test
{
    NSString *str = @"1234567";
    
    // 1. 获取字符串的长度
    //NSInteger length = [str length];
    //NSLog(@"%d",length);
    // 2. 返回单个字母(Index从零开始)
    unichar c = [str characterAtIndex:2];
    NSLog(@"%c",c);
    
    // 3. 字符串的比较
    NSString *str2 = @"2345678";
    NSComparisonResult rect = [str compare:str2];
//    NSOrderedAscending = -1L,升序
//    NSOrderedSame,  相等
//    NSOrderedDescending 降序
    if (rect == NSOrderedAscending) {
        NSLog(@"右边大");
    }else if (rect == NSOrderedSame){
        NSLog(@"相等");
    }else if (rect == NSOrderedDescending)
    {
        NSLog(@"左边大");
    }
    NSMutableString * str8 = [NSMutableString stringWithUTF8String:"hello world"];
    NSLog(@"%@",str8);
    
}
+(void)test
{
    NSString *str = @"渴了喝露水,饿了吃蚂蚱";
    
    NSUInteger len = [str length];
    NSLog(@"%lu",len);
    // 从头开始截取4个长度(渴了喝露)
    NSString *sub1 = [str substringToIndex:4];
    
    // 从第二个字符开始截取 直到最后(喝露水,饿了吃蚂蚱)
    NSString *sub2 = [str substringFromIndex:0];
    
    // 位置 长度
    NSRange range = {3,1};
    // 从3位置开始截取 截取长度4的字符串(露水,饿)
    NSString *sub3 = [str substringWithRange:range];
    NSLog(@"%@",sub2);
    
}
+(void)test
{
    // 字符串的截取
    NSString *str = @"123456";
    
    NSArray *array = [str componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"123456"]];
   // NSArray *array = [str componentsSeparatedByString:@"a"];
   // NSLog(@"%@",str);
    NSLog(@"%@",array);
    for (id rr in array) {
        NSLog(@"%@",rr);
    }
    //NSString *nameStr = array[0];
    
   // NSArray *array = [str componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@",%"]];
    
    
    // 字符串的拼接
    NSString *str1 = [array componentsJoinedByString:@"$"];
   NSLog(@"%@",str1);
   NSLog(@"%@",str);
}
+ (void)test
{
    // ******* 字符串和基本数据类型的转换********
    // 1.int转成NSString
    NSString *str = [NSString stringWithFormat:@"%d*%d",10,12];
    NSLog(@"%@",str);
    // 2. NSString转成int
    int strNum = [str intValue];
    NSLog(@"%d",strNum);
    // 其他类型类似int
    
    // *******查找字符串的位置和范围********
    NSString *strC = @"北京欢迎你";
    NSRange range = [strC rangeOfString:@"欢迎"];
    
    if (range.location == NSNotFound) {
        NSLog(@"不存在");
    }else
    {
        NSLog(@"存在");
        NSLog(@"%lu---%lu",range.location,range.length);
    }
}

可变字符串

#import "Test.h"

// 写一个宏 返回两个数的最大值


#define SHOW(str,str2) NSLog(@"%@-- %@",str,str2);

//#define NAX(a,b) if(a > b){return a;}else{return b;}

#define MAXX(a,b) (a > b)?a:b

@implementation Test
+ (void)test
{
    
    
    //    NSLog(@"%@",strM);
    //    SHOW(strM,strM);
    //    int a = 10;
    //    int b = 20;
    //    int cc =  MAXX(a, b);
    
    // 可变字符串的创建方式
    // 1.
    NSMutableString *strM = [[NSMutableString alloc] init];
    // 可变字符串特有的方法
    [strM setString:@"秦时明月"];
    
    // 2.
    NSMutableString *strM1 = [[NSMutableString alloc] initWithString:strM];
    NSLog(@"%@",strM1);
    
    // 3.
   
    NSMutableString *strM2 = [NSMutableString stringWithUTF8String:"芈月传"];
    
    // 从字符串后面开始拼接
    [strM2 appendString:@"第一集"];
    NSLog(@"%@",strM2);
    
    //从字符串后面开始拼接 可以添加拼接的字符串
    [strM2 appendFormat:@"%d--%@",3,@"呵呵"];
    NSLog(@"%@",strM2);
    
    // 在我们索引之前的位置添加
    [strM2 insertString:@"广告" atIndex:0];
    NSLog(@"%@",strM2);
    
    // 删除某个位置和范围的字符
    NSRange range = {1,3};
    [strM2 deleteCharactersInRange:range];
    NSLog(@"%@",strM2);
    
    // 替换某个位置和范围的字符
    [strM2 replaceCharactersInRange:range withString:@"天明"];
    NSLog(@"%@",strM2);
}
@end

切割字符串

#import <Foundation/Foundation.h>
#import "MCJAddressBook.h"

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        MCJAddressBook *addressBook = [[MCJAddressBook alloc] initWithString:"123,1234,dfad,12,we"];
       
        
    }
    return 0;
}
#import <Foundation/Foundation.h>

@interface MCJCard : NSObject
{
    char _name[20];
    char _corp[20];
    char _phoneNumber[20];
}


- (MCJCard *)initWithName:(const char *)name corp:(const char *)corp phoneNumber:(const char *)number;

- (void)setName:(const char *)name;

- (void)setCorp:(const char *)corp;

- (void)setPhoneNumber:(const char *)phoneNumber;
@end
#import <Foundation/Foundation.h>

@interface MCJCard : NSObject
{
    char _name[20];
    char _corp[20];
    char _phoneNumber[20];
}


- (MCJCard *)initWithName:(const char *)name corp:(const char *)corp phoneNumber:(const char *)number;

- (void)setName:(const char *)name;

- (void)setCorp:(const char *)corp;

- (void)setPhoneNumber:(const char *)phoneNumber;
@end

#import "MCJCard.h"

@implementation MCJCard
- (MCJCard *)initWithName:(const char *)name corp:(const char *)corp phoneNumber:(const char *)number
{
    if(self = [super init]){
        strcpy(_name, name);
        strcpy(_corp, corp);
        strcpy(_phoneNumber, number);
    }
    return self;
}
- (void)setName:(const char *)name  //name = "王二小"
{
    strcpy(_name, name);
}

- (void)setCorp:(const char *)corp
{
    strcpy(_corp, corp);
}

- (void)setPhoneNumber:(const char *)phoneNumber
{
    strcpy(_phoneNumber, phoneNumber);
}
@end
#import <Foundation/Foundation.h>

@interface MCJAddressBook : NSObject
{
    //姓名,昵称,性别,手机,家庭座机,公司座机,公司,职务,所属群组,公司地址,家庭住址,生日,电子邮件,QQ号码,MSN号码,备注
    char _name[20];
    char _nickName[20];
    char _sex[5];
    char _mobileNumber[12];
    char _homeTel[12];
    char _companyTel[12];
    char _companyName[20];
    char _job[20];
    char _group[20];
    char _companyAdd[20];
    char _homeAdd[20];
    char _birthDay[20];
    char _email[20];
    char _QQ[20];
    char _MSN[20];
    char _remarks[20];
}

-(MCJAddressBook *)initWithString:(const char *)str;
@end
#import "MCJAddressBook.h"

@implementation MCJAddressBook

char * q[16] = {};
//全局变量生命周期是程序运行的全过程

//如果一个成员方法只被另一个成员方法调用,不需要被外部函数调用如main函数。则该方法只写实现,不写声明。
- (char * *)componetsStr:(char *)str withStr:(const char *)str2
{
    char * p = str;
    int i = 0;
    while (1) {
        NSLog(@"%s",p);
        p = strtok(p, str2);
        if(!p)
            break;
        //记下分割出的每一段。
        q[i++] = p;
        p = NULL;
    }
    return q;
}

- (MCJAddressBook *)initWithString:(const char *)str
{
    if(self = [super init]){
        //函数中的变量,在函数调用时同压栈产生,调用结束就会消失
        char _str[100];
        strcpy(_str, str);
        //分割字符串
        [self componetsStr:_str withStr:","];
        
//        strcpy (_name, q[0]);
//        strcpy (_nickName, q[1]);
//        strcpy (_sex, q[2]);
//        strcpy (_mobileNumber, q[3]);
//        strcpy (_homeTel, q[4]);
//        strcpy (_companyTel, q[5]);
//        strcpy (_companyName, q[6]);
//        strcpy (_job, q[7]);
//        strcpy (_group, q[8]);
//        strcpy (_companyAdd, q[9]);
//        strcpy (_homeAdd, q[10]);
//        strcpy (_birthDay, q[11]);
//        strcpy (_email, q[12]);
//        strcpy (_QQ, q[13]);
//        strcpy (_MSN, q[14]);
//        strcpy (_remarks, q[15]);
    }
    
    return self;
}

@end

切割字符串2

#import <Foundation/Foundation.h>
#import "Calculate.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Calculate * js = [[Calculate alloc] init];
        NSString * formula = @"-1+100*2/3-100" ;
        NSLog(@"%ld",[js calcString:formula]);
    }
    return 0;
}

//实现一个函数,计算一个字符串的值,该字符串中只有+ - * /四种运算符, 没有括号。
////参数mathString:要计算的字符串;
////返回值:把计算出来的结果返回
//例如:传入:@"1+2-1+100"     返回102
//@"-1+23+100-33" 返回 89
//@"3-10*10+8/3"      -95
//@"10+2/1*100-20"    190
//*/
#import <Foundation/Foundation.h>

@interface Calculate : NSObject

- (NSInteger)calcString:(NSString *)mathString;

@end
#import "Calculate.h"

@implementation Calculate

- (NSInteger)calcString:(NSString *)mathString
{
    //将字符串切割成只有数字字符串和带*/的字符串
    NSMutableArray * arrNum = [NSMutableArray arrayWithArray:[mathString componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"+-"]]];
    //如果第一个数是负数,会产生空字符串
    [arrNum removeObject:@""];
    //获取加减符号
    NSMutableArray * arrChar = [NSMutableArray arrayWithArray:[mathString componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"0123456789*/"]]];
    
    for (NSInteger i = 0; i < arrNum.count ; i ++) {//遍历数组,将元素全部变成数字字符串
        NSString * str = arrNum[i];
        if ([str componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"*/"]].count > 1) {
            //获取str中的数字字符串
            NSMutableArray * arrNumSon = [NSMutableArray arrayWithArray:[str componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"*/"]]];
            //获取*/符号
            NSMutableArray * arrCharSon = [NSMutableArray arrayWithArray:[str componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"0123456789"]]];
            [arrCharSon removeObject:@""];
            //就算字符串str的结果
            NSInteger result = [arrNumSon[0] integerValue];
            for (NSInteger j = 1; j < arrNumSon.count; j ++) {
                NSInteger k = [arrNumSon[j] integerValue];
                if ([arrCharSon[j - 1] isEqualTo:@"*"]) {
                    result *= k;
                }
                else result /= k;
            }
            //将计算结果转成数字字符串存入arrNum数组中
            NSString * strResult = [NSString stringWithFormat:@"%ld",result];
            arrNum[i] = strResult;
            
        }
        
        
    }
    //计算数组arrNum的结果
    NSInteger resultSum;
    if ([arrChar[0] isEqualTo:@""]) {//说明第一个数不是负数
        [arrChar removeObject:@""];
        resultSum = [arrNum[0] integerValue];
        for (NSInteger i = 1; i < arrNum.count; i ++) {
            NSInteger h = [arrNum[i] integerValue];
            if ([arrChar[i - 1] isEqualTo:@"-"]) {
                resultSum -= h;
            }
            else resultSum += h;
        }
        
    }
    else{//说明第一个数是负数
        [arrChar removeObject:@""];
        resultSum = 0;
        for (NSInteger i = 0; i < arrNum.count; i ++) {
            NSInteger h = [arrNum[i] integerValue];
            if ([arrChar[i] isEqualTo:@"-"]) {
                resultSum -= h;
            }
            else resultSum += h;
        }

    }
    
    return resultSum;
    
    
//    NSArray * arr = [mathString componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"+*/"]];
    
//    if (arr.count == 1) {//说明都是减法
//        NSArray * arrOne = [mathString componentsSeparatedByString:@"-"];
//        NSInteger sum = 0;
//        if ([arrOne[0] isEqualTo: @"" ]) {//说明第一个数也是负数
//            for (NSInteger i = 1 ; i < arrOne.count ; i ++) {
//                NSInteger num = [arrOne[i] integerValue];
//                sum -= num;
//            }
//            return sum;
//        }
//        else {//说明第一个数不是是负数
//            sum = [arrOne[0] integerValue];
//            for (NSInteger i = 1 ; i < arrOne.count ; i ++) {//                NSInteger num = [arrOne[i]
//integerValue];
//                sum -= num;
//            }
//            return sum;
//        }
//
//    }
//    

}

@end


//实现一个函数,计算一个字符串的值,该字符串中只有+ - * /四种运算符, 没有括号。
////参数mathString:要计算的字符串;
////返回值:把计算出来的结果返回
//例如:传入:@"1+2-1+100"     返回102
//@"-1+23+100-33" 返回 89
//@"3-10*10+8/3"      -95
//@"10+2/1*100-20"    190
//*/
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容