黑马程序员——解4道与 NSArray、NSString 知识点有关的编程题

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

看到论坛上已经通过面试的同学分享了两道编程题,以下是我的解题思路,记录下来留作复习用。


1、已有一个数组:@[@"1",@"2",@"3",@"6",@"8",@"9",nil] ,已经按照从小到大的顺序排列好。让用户输入一个新的整数,将这个整数放进数组里,并保持从小到大的顺序排列。


#import <Foundation/Foundation.h>

int main()
{
    //  创建已知的数组,定义为可变长度类型
    NSMutableArray *a1 = [NSMutableArray arrayWithObjects:@"1",@"2",@"3",@"6",@"8",@"9", nil];
    //  设置一个用来接受用户所输入整数的整形变量
    int num1;
    
    //  接受用户所输入的整数
    printf(@"请输入一个整数:\n");
    scanf("%d", &num1);
    
    //  计算a1数组当前的长度,用count变量记录下来
    int count = (int)a1.count;
    
    //  将用户输入的整形数字转换成字符串,以便于存入a1数组
    NSString *numstr = [NSString stringWithFormat:@"%d",num1];
    //  将用户输入的数字(现为字符串类型)追加到a1数组末尾
    [a1 addObject:numstr];
    
    //  从右到左对数组内的字符串值进行扫描,长度为原有长度加1
    for(int i = count; i > 0; i--)
    {
        //  如果当前位置的数字小于左侧数字的值,则交换二者的位置
        if([a1[i] intValue] < [a1[i - 1] intValue])
        {
            NSString *temp = a1[i];
            a1[i] = a1[i - 1];
            a1[i - 1] = temp;
        }
        //  否则说明已经完成了应做的工作,跳出循环体结束工作
        else
        {
            break;
        }
    }
    
    //  输出插入用户输入的数字后的数组
    NSLog(@"%@",a1);
    
    return 0;
}

2、 现有如下定义的字符串: NSString * str=@“itheimaAndroid”,能对该字符串进行修改请输出删除Android后的新字符串。

#import <Foundation/Foundation.h>

int main()
{
    //  创建已知字符串
    NSString *str=@"itheimaAndroid";
    
    NSMutableString *str1;
    str1 = [[NSMutableString alloc]initWithFormat:@"%@",str];
    
    //  此处之前做错了,忘记了range是结构体,加了*,还好后来想起来了
    NSRange range =  [str1 rangeOfString:@"Android"];
    
    //  按照之前得到的range,删除字符串Android
    [str1 deleteCharactersInRange:range];
    
    NSLog(@"%@",str1);
    
    return 0;
}

3、手动实现capitalizedString的功能,对一段文字的每个单词的首字母转换成大写。

#import <Foundation/Foundation.h>

int main()
{
    //  创建已知字符串
    NSMutableString *str = [[NSMutableString alloc]initWithFormat:@"hahahaha wowowowo Hehe heihei enen."];
    
    
    //  单独取出字符串的第一个字符
    char firstchar = [str characterAtIndex:0];
    //  判断第一个字符是否是小写字母
    if ((firstchar >= 'a') && (firstchar <= 'z'))
    {
        //  如果是小写字母,则转换成大写
        firstchar = firstchar + ('A' - 'a');
    }
    
    //  将第一个字母转换后的字符转换为字符串
    NSString *firstcharstr = [[NSString alloc]initWithFormat:@"%c",firstchar];
    
    //  用转换后的第一个字母的字符串替换掉原来字符串的第一个字母
    [str replaceCharactersInRange:NSMakeRange(0, 1) withString:firstcharstr];
    
    
    //  遍历整个字符串
    for (int i=0; i < str.length; i++)
    {
        //  如果遇到空格(此时的i值,即为下一个单词的第一个字母的前一个字符)
        if ([str characterAtIndex:i] == ' ')
        {
            //  判断空格后面的字符是不是小写字母
            if (([str characterAtIndex:(i + 1)] >= 'a') && ([str characterAtIndex:(i + 1)] <= 'z'))
            {
                //  如果是小写字母就转换成大写字母
                char temp1 = [str characterAtIndex:(i + 1)] + ('A' - 'a');
                
                //  将转换后的字母转换成字符串
                NSString *temp2 = [[NSString alloc]initWithFormat:@"%c",temp1];
                
                //  用转换后的字符替换原来的空格后面的字符
                [str replaceCharactersInRange:NSMakeRange((i + 1), 1) withString:temp2];
            }
        };
    }
    
    //  输出检验
    NSLog(@"%@",str);
    
    return 0;
}

4. 把一个英文句子反向输出,如‘abc’- 'cba'

#import <Foundation/Foundation.h>

int main()
{
    //  设置已知字符串
    NSMutableString *str = [[NSMutableString alloc] initWithString:@"abcdefghij123456789"];
    
    //  求字符串总长度
    int changDu = (int)str.length;
    
    //  将字符串最右端字符的下标储存在i中,遍历,直到字符串中间位置结束
    for (int i = (changDu - 1); i >= (changDu / 2); i--)
    {
        //  在遍历的同时储存要交换的两个字符的值
        char right = [str characterAtIndex:i];
        char left = [str characterAtIndex:(changDu - i - 1)];
        
        //  交换两个字符的值,同时将两个字符转换成字符串,方便后面的替换字符串操作
        NSString *rightNow = [[NSString alloc] initWithFormat:@"%c",left];
        NSString *leftNow = [[NSString alloc]initWithFormat:@"%c",right];
        
        //  将交换好的字符的字符串替换进原来的字符串中
        [str replaceCharactersInRange:NSMakeRange(i, 1) withString:rightNow];
        [str replaceCharactersInRange:NSMakeRange(changDu - i - 1, 1) withString:leftNow];
    }
    
    //  检查输出结果
    NSLog(@"%@",str);
    
    return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值