【黑马程序员】oc程序复习大典

创建一个NSDictionary,并创建可变副本和不可变副本,说下是深复制还是浅复制。

  1. 有序数组,插入一个数后还保证有序。(OC)
  2. NSString和NSDictionary的遍历,知道几种写几种。
  3. NSArray的遍历,知道几种写几种。
  4. 利用分类实现以下两个功能:(1)字符串的反转。(2)计算字符串中英文字母的个数
  5. 求几个字符串的最大公共子字符串(oc)
  6. 输入6个字符串,按首字符的大小,对6个字符串排序。
  7. 编写一个函数,找出整数数组的最小值。
  8. 编写一个程序,用于接收从终端输入的整数,提取并用英文显示这个数的每一位数,例如输入112,输出One One Two
  9. 求两个字符串的公共字母,添加到第三个字符串中。
  10. 给一个英文句子,把每个单词的首字母转成大写。
  11. 给一个英文句子,罗列出句子中出现的字母和其出现的次数,不区分大小写。

 

 

 

 

 

4》NSArray遍历的四种方法

第一种,for循环

void arrayFor()

{

 

//快速创建一个oc数组

NSArray *array = @[@"one",@"two"]; 

//遍历数组

for(int i=0; i<array.count ; i++)

{

NSLog(@"array[%i]=%@",i ,array[i]);

}

}

第二种,快速遍历for(if obj in array)

void arrayFor()

{

NSArray *array = @[@"one",@"two"];

for(id obj in array)

{

NSLog(@"%@",obj);

}

}

第三种 调用block,原理:每遍历一个元素,就会调用一次block,并且把这个元素和下标当做block的参数传给id obj和idx

void arrayFor()

{

NSArray *array = @[@"one",@"two"];

[array enumerateObjectsUsingBlock:^(id obj, NSInteger idx, BOOL *stop)

{NSLog(@"array[%zi]=%@",idx,obj);

if(idx==1)

{*stop=YES;}

}];

第四种 通过迭代器遍历数组

void arrayFor()

{

NSArray *array = @[@"one",@"two"];

//获取数组的迭代器

NSEnumerator *enumerator = [array objectEnumerator];

id obj = nil;

//获取下一个数组元素,当下一个元素不为空的时候,继续遍历直到下个元素为空

while((obj =[enumerator nextObject])!=nil)

{

NSLog(@"%@",obj);

}

 

3>NSDictionary的遍历

第一种 for循环快速遍历

void dictFor()

{

NSDictionary*dict=@{@"k1":@"v1",@"k2":@"v2"};

//遍历字典的所有key

for(id key in dict)

{

id value=[dict objectForKey:key];

NSLog(@"%@=%@",key,value);

}

第二种 使用迭代器遍历

void dictFor()

{

NSDictionary*dict=@{@"k1":@"v1",@"k2":@"v2"};

NSEnumerator *enumer=[dict keyEnumerator];

id key =nil;

while(key=[enumer nextObject])

{

id value=[dict objectForKey:key];

NSLog(@"%@=%@",key ,value);

}

第三种 使用block遍历字典

void dictFor()

{

NSDictionary*dict=@{@"k1":@"v1",@"k2":@"v2"};

[dict enumeratorKeysAndObjectsUsingBlock:^(id key ,id obj ,BOOL *stop)

{NSLog(@"%@=%@",key ,obj);}

];

 

5>利用分类实现两个方法

第一个:计算某个字符串中英文字母的个数

#import "NSString + Number.h"

@implementation NSString (Number)

-(int)numberCount

{

int count =0;

for(int i=0; i<self.length; i++)

{

//取出i这个位置对应的字符

unichar c=[self characteAtIndex:i];

if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))

{ count++;

}

return count;

}

第二个:实现字符串的反转

@implementation NSString (Reverse)

-(NSString *)reverseOfString

{

//定义一个可变字符串

NSMutableString *str = [NSMutableString string];

//按倒序遍历字符串

for(int i=(int)self.length-1; i>=0; i--)

{ //按倒序获取每个字符串的range

NSRange range =NSMakeRange( i,1);

//将每个字符按照它的range截取下来,并保存在不可变字符串s中

NSString *s = [self substringWithRange: range];

//将每个单字符的字符串s拼接到可变字符串str中

[str appendString: s];

}return str;

}

7》多个字符串排序:char *name[]={"china","america","australia"};

 

#include<stdio.h>

#include<string.h>

void sort_string(char *name[], int len)

{

int min;

for(int i=0; i<len-1; i++)

{

min =i ; //假设一个最小值

for(int j=i+1; j<len ; j++)

{

//比较大小

if(strcmp(name[j],name[min])<0)

{

min=j;

}

}

//交换(地址交换)

if(i!=min)

{

char *temp;

temp = name[i];

name[i]=name[min];

name[min]=temp;

}

}

8>编写一个函数,找出整数数组的最小值

int findMin(int *a,int n) //n为个数

{

int i,min=a[0];

for(i=0;i<n;i++)

{

if(min>a[i])

{

min=a[i];

}

return min;

}

9>编写一个程序,用于接收从终端输入的整数,提取并用英文显示这个数的每一位数,例如输入112,输出one one two

//定义一个变量初始化为0,用于保存用户输入的整数

int input =0;

//提示用户输入一个整数

NSLog(@"请输入一个整数");

//接收用户输入的整数,并保存在input中

scanf("%d",&input);

//将用户输入的整数转换成字符串对象,并保存于inStr中

NSString*inStr=[NSString stringWithFormat:@"%i",input]

//设置一个不可变的英文数组

NSArray *engArray=@[@"Zero",@"Two"…];

//设置一个可变的字符串用于存放处理的结果

NSMutableString *engOutArray=[NSMutableString string];

//开始遍历

for(int i=0;i<inStr.length;i++)

{

//取出字符串对象中得每一个字符,并转换成整型数据

int dex=((int)[inStr characterAtIndex:i])-48;

//根据整型数据,从英文数组中取出对应的英文单词,并存放于可变字符串中

[engOutArray appendString: engArray[dex]];

//存放英文单词后,加入一个空格

[engOutArray appendString:@" "];

}

//遍历结束,输出结果

NSLog(@"处理结果为:%@",engOutArray); 

10>

#include <stdio.h>

#include <string.h>

//定义一个函数,功能是获取两个字符串的最大公共子字符串

//形参分别为字符型指针变量str1、str2和整型常量 num1、num2

int getMaxSonStr(char *s1, char *s2, int len1, int len2)

{

    //index表示出现第一个相同字符时str1中对应字符的下标

 

int index = 0;

    //m 表示公共子串初始长度是0, n表示每个公共子串的长度

 

int = 0, n = 0;

      

    //遍历s1

 

for (int = 0; i < len1; i++)

    {

        //遍历s2

 

for (int = 0; j < len2; j++)

        {

 

//遇到相同字符时

//s1[i] != '\0'可以防止越界

 

if (s1[i] ==s2[j] && s1[i] != '\0')

            {

                //子串长度为1

 

= 1;

//s1[i+k]!='\0',结束符相等不比较,预防越界

 

    for (int = 0; s1[i+k] == s2[j+k] && s1[i+k]!='\0'; k++)

                {

                    //没多一个相同字符,子串长度自增+1

 

        m++;

                }

              

                //假定n为最长的子串的长度

 

        if(> n)

                {

                    //记录最长子串的起始下标

 

        index = i;

                    //将最长子串的长度值赋值给最大公共子串长度

 

        n = m;

                }

            }

        }

    }

    //当存在子串时候,输出最大的

 

if(!=0)

    {

        printf("最长的公共子串:");

        for(int = 0; i < m; i++)

        {

            printf("%c",s1[index+i]);

        }

    }

    //不存在子串输出没有

 

else

        printf("没有公共子串!\n");

    return 0;

}

 

 

 

int main(int argc, const char * agv[])

{

    //定义两个字符串str1和str2,并对其进行初始化

 

    char str1[110];

        char str2[110];

    //提示用户输入第一个字符串

 

    printf("请输入第一个字符串:\n");

    //接收用户输入的字符串

 

    gets(str1);

//提示用户输入第二个字符串

 

    printf("请输入第二个字符串:\n");

    //接收用户输入的字符串

 

    gets(str2);

    //计算输入字符串str1的长度

 

    int len_str1 = strlen("str1");

    //计算输入字符串str2的长度

 

    int len_str2 = strlen("str2");

      

    //调用函数,获取两个字符串的最大公共子字符串

 

    getMaxSonStr(str1,str2,len_str1,len_str2);

 

    printf("\n");

    return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值