创建一个NSDictionary,并创建可变副本和不可变副本,说下是深复制还是浅复制。
-
有序数组,插入一个数后还保证有序。(OC)
-
NSString和NSDictionary的遍历,知道几种写几种。
-
NSArray的遍历,知道几种写几种。
-
利用分类实现以下两个功能:(1)字符串的反转。(2)计算字符串中英文字母的个数
-
求几个字符串的最大公共子字符串(oc)
-
输入6个字符串,按首字符的大小,对6个字符串排序。
-
编写一个函数,找出整数数组的最小值。
-
编写一个程序,用于接收从终端输入的整数,提取并用英文显示这个数的每一位数,例如输入112,输出One One Two
-
求两个字符串的公共字母,添加到第三个字符串中。
-
给一个英文句子,把每个单词的首字母转成大写。
-
给一个英文句子,罗列出句子中出现的字母和其出现的次数,不区分大小写。
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 m = 0, n = 0;
//遍历s1
for (int i = 0; i < len1; i++)
{
//遍历s2
for (int j = 0; j < len2; j++)
{
//遇到相同字符时
//s1[i] != '\0'可以防止越界
if (s1[i] ==s2[j] && s1[i] != '\0')
{
//子串长度为1
m = 1;
//s1[i+k]!='\0',结束符相等不比较,预防越界
for (int k = 0; s1[i+k] == s2[j+k] && s1[i+k]!='\0'; k++)
{
//没多一个相同字符,子串长度自增+1
m++;
}
//假定n为最长的子串的长度
if(m > n)
{
//记录最长子串的起始下标
index = i;
//将最长子串的长度值赋值给最大公共子串长度
n = m;
}
}
}
}
//当存在子串时候,输出最大的
if(m !=0)
{
printf("最长的公共子串:");
for(int i = 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;
}