1. 判断中间目录是否存在 (10分)

比如 传入字符串 @"/home/qianfeng/oc.txt" 和 @"qianfeng"

返回:YES

传入字符串 @"/usr/qianfeng/oc.txt 和 @"fengqian"

返回:NO

2.将字符串按照单词逆序 (10分)

输入一段字符串,已知字符串只由字母和空格构成,将字符串按照单词逆序

传入@"welcome to qianfeng"

返回 @"qianfeng to welcome"

3.将C++的标识符转成OC的标识符(20分)

C++的标识符和OC一样由数字字母下划线组成,打头的不是数字。当标识符超过一个单词,

C++采用全字母小写,单词间用下划线连接的书写规范,如:

qian_feng

OC采用除第一个单词外,其余单词首字母大写的书写规范,如:

qianFeng

//传入C++标识符,返回OC标识符

4. 创建大量字典(10分)

传入两个数组,key和obj,数组元素个数未知。创建大量字典,字典的个数与key和obj中元素较少的一个数组的元素个数相同。key中第i个元素和obj中第i个元素组成键值对。所有字典添加到一个可变数组中,返回数组的地址。

5. 传入一段字符串,把相同的字符按出现顺序,归在一起,并压缩(20分)

比如:输入: SamSameCome

输出:  SSaammmeeCo

S2a2m3e2C1o1

返回值为压缩后的结果,比如S2a2m3e2C1o1

6 传入一段字符串,字符串中可能有任何字符,要求找出字符串中最长的单词,即最长的连续英语字母,返回该单词的字母个数(20分)

比如: 输入 Yes, I hate the guy who make this fucking examination paper!

返回:11 即examination的长度。

7.打印杨辉三角(10分)

输入 7

1

1 1

1 2  1

1 3  3  1

1 4  6  4  1

1 5 10 10  5 1

1 6 15 20 15 6 1

NSLog打印

8. 求一个字符串s的最大连续递减数字子串。(20)

比如:

输入 f12345fffwf3210abcd 输出为 3210

输入 abcd765bbw135797531f12345 输出为 765

//如果有多个相同的最大数字串那么返回最后一个

9.对指定的字符串(单词间用任意的非字母分隔)进行分析,返回它里边所有单词出现的次数,返回值字字典 用单词作为key, 出现次数作为值(20分)(注意不都以空格分隔,是任意的非字母字符)

10.剔除字符串中的全部空格(10分)

传入:@"welcome to        qianfeng"

返回:@"welcometoqianfeng"

11. 判断字符串str是否是合法的C变量(10分)

变量名只能由字母、数字、下划线_构成,并且以字母和下划线_开头。

实际上就是判断是否是一个合法的标识符 不考虑关键字情况

如:@"_ios" 是合法的变量名

@"1oc" 不合法

@"123" 不合法

@"xiaohuang_"  合法

@"_UI*" 不合法

@"#OC"  不合法

12.对称的数组(10分)

传入一个数组,其元素类型与个数皆未知,返回新数组,由原数组的元素正序反序拼接而成。

//参数arr 表示原数组地址

//返回值是新数组的地址

传入:@[@"one", @"Two", @"Three"]

返回:@[@"one", @"Two", @"Three", @"Three", @"Two", @"one"]

13.将字符串后移(10分)

将字符串向右移动指定位数,首尾循环

如:string传入@"welcometoqianfeng", bits传入4

返回:@"fengwelcometoqian"

14.找出出现最多的字母 (10分)

找出字符串中出现次数最多的字母,将该字母和字母出现的次数拼接成一个新字符串

返回新字符串。

传入:@"WelcomeToQianfeng"

返回:@"e3"

15.将字符中单词用空格隔开(20分)

已知传入的字符串中只有字母,每个单词的首字母大写,请将每个单词用空格隔开

只保留第一个单词的首字母大写

传入:@"HelloMyWorld"

返回:@"Hello my world"

/**************************************************************/

//.h声明文件方法定义

#import <Foundation/Foundation.h>

#define PATH @"/Users/paul/Desktop/English.rtf"

@interface Test : NSObject

+ (BOOL)isPath:(NSString *)path includeMiddleDirectory:(NSString *)dir;

+ (NSString *)reverseWordsInString:(NSString *)str;

+ (NSString *)objcIdentifierFromCppIdentifier:(NSString *)idf;

+ (NSArray *)createDictionariesWithKeys:(NSArray *)key andObjs:(NSArray *)obj;

+ (NSString *)compressString:(NSString *)s;

+ (NSUInteger)numbersOfLongestWordInString:(NSString *)s;

+(void)printYangHuiTriangle:(int) n;

+ (NSString *)subNumberString:(NSString *)string;

+(NSDictionary*)wordCount:(NSString*)fileContent;

+(NSString *)stringWithoutSpaceInString:(NSString *)string;

+ (BOOL) isCValidVar:(NSString *)str;

+ (NSArray *)symmetryArray:(NSArray *)arr;

+ (NSString *)displacemetString:(NSString *)string forBits:(NSUInteger)bits;

+ (NSString *)maxTimesCharacterOfString:(NSString *)string;

+ (NSString *)separateString:(NSString *)string;

/**************************************************************/

/*判断中间目录是否存在

比如 传入字符串 @"/home/qianfeng/oc.txt" 和 @"qianfeng"

返回:YES

传入字符串 @"/usr/qianfeng/oc.txt 和 @"fengqian"

返回:NO

+ (BOOL)isPath:(NSString *)path includeMiddleDirectory:(NSString *)dir;

*/

//测试代码

//        Test *t=[[Test alloc] init];

//        if([Test isPath:PATH includeMiddleDirectory:@"Users"])

//        {

//            NSLog(@"存在该目录");

//        }else

//        {

//            NSLog(@"不存在该目录");

//        }

//实现方法

+ (BOOL)isPath:(NSString *)path includeMiddleDirectory:(NSString *)dir

{

NSArray *pArray=[[NSArray alloc] initWithArray:[path componentsSeparatedByString:@"/"]];

BOOL re=[pArray containsObject:dir];

return re;

}

/**************************************************************/

/*

将字符串按照单词逆序

输入一段字符串,已知字符串只由字母和空格构成,将字符串按照单词逆序

传入@"welcome to qianfeng"

返回 @"qianfeng to welcome"

+ (NSString *)reverseWordsInString:(NSString *)str;

*/

//测试代码

//        NSString *s=[Test reverseWordsInString:@"welcome to qianfeng"];

//        NSLog(@"%@",s);

//实现方法

+ (NSString *)reverseWordsInString:(NSString *)str

{

NSArray *array=[[NSArray alloc] initWithArray:[str componentsSeparatedByString:@" "]];

NSMutableArray *s=[[NSMutableArray alloc] init];

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

{

[s addObject:array[[array count]-1-i]];

}

NSString *s1=[s componentsJoinedByString:@" "];

return s1;

}

/**************************************************************/

/*

将C++的标识符转成OC的标识符

C++的标识符和OC一样由数字字母下划线组成,打头的不是数字。当标识符超过一个单词,

C++采用全字母小写,单词间用下划线连接的书写规范,如:

qian_feng

OC采用除第一个单词外,其余单词首字母大写的书写规范,如:

qianFeng

//传入C++标识符,返回OC标识符

+ (NSString *)objcIdentifierFromCppIdentifier:(NSString *)idf;

*/

//测试代码

//        NSString *s=[Test objcIdentifierFromCppIdentifier:@"qian_feng"];

//        NSLog(@"%@",s);

//方法实现

+ (NSString *)objcIdentifierFromCppIdentifier:(NSString *)idf

{

NSMutableArray *array=[[NSMutableArray alloc] initWithArray:[idf componentsSeparatedByString:@"_"]];

for (int i=1; i<[array count]; i++)

{

[array replaceObjectAtIndex:i withObject:[array[i] capitalizedString]];

}

NSString *s=[array componentsJoinedByString:@""];

return s;

}

/**************************************************************/

/*

创建大量字典

传入两个数组,key和obj,数组元素个数未知。创建大量字典,字典的个数与key和obj中元素较少的一个数组的元素个数相同。key中第i个元素和obj中第i个元素组成键值对。所有字典添加到一个可变数组中,返回数组的地址。

+ (NSArray *)createDictionariesWithKeys:(NSArray *)key andObjs:(NSArray *)obj;

*/

//测试代码

//        NSArray *s1=@[@"0",@"1",@"2",@"3",@"4",@"5"];

//        NSArray *s2=@[@"10",@"11",@"12",@"13",@"14",@"15"];

//        NSArray *s3 =[Test createDictionariesWithKeys:s1 andObjs:s2];

//        NSLog(@"%@",s3);

//实现方法

+ (NSArray *)createDictionariesWithKeys:(NSArray *)key andObjs:(NSArray *)obj

{

NSMutableArray *mulArray=[[NSMutableArray alloc] init];

NSInteger n1=[key count];

NSInteger n2=[obj count];

NSInteger n3=n1>n2?n1:n2;

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

{

NSMutableDictionary *dic=[[NSMutableDictionary alloc] initWithObjects:obj forKeys:key];

[mulArray addObject:dic];

}

NSArray *a=[[NSArray alloc] initWithArray:mulArray];

return a;

}

/**************************************************************/

/*

传入一段字符串,把相同的字符按出现顺序,归在一起,并压缩

比如:输入: SamSameCome

输出:  SSaammmeeCo

S2a2m3e2C1o1

返回值为压缩后的结果,比如S2a2m3e2C1o1

+ (NSString *)compressString:(NSString *)s;

*/

//测试代码

//        NSString *s=@"SamSameCome";

//        NSString *s1=[Test compressString:s];

//        NSLog(@"%@",s1);

//实现方法

+ (NSString *)compressString:(NSString *)s

{

NSMutableArray *sa=[[NSMutableArray alloc] init];

NSMutableArray *sa1=[[NSMutableArray alloc] init];

//将字符串存入可变数组

for(int i=0;i<[s length];i++)

{

NSString *s1=[[NSString alloc] initWithFormat:@"%c",[s characterAtIndex:i]];

[sa addObject:s1];

}

//初始化第一个元素

[sa1 addObject:[sa objectAtIndex:0]];

[sa removeObjectAtIndex:0];

//遍历sa,一旦遇到与sa1相同的则移除,再次遍历,知道sa移空

while([sa count]!=0)

{

for (int j=0; j<[sa count]; j++)

{

if([[sa1 objectAtIndex:([sa1 count]-1)]isEqualTo:[sa objectAtIndex:j]])

{

[sa1 addObject:[sa objectAtIndex:j]];

[sa removeObjectAtIndex:j];

j=0;

}

}

//遍历完一次把一种相同字母放到一起,接下来存入sa开头的元素

if([sa count] !=0)

{

[sa1 addObject:[sa objectAtIndex:0]];

[sa removeObjectAtIndex:0];

}

}

//相同字母移动到一起存入sa1

int count=1;

int flag=0;

NSMutableArray *arr=[[NSMutableArray alloc] init];

for (int i=0; i<[sa1 count]; i++)

{

//判断最后一个元素是否与前一个元素相同

if(i==([sa1 count]-1))

{

if([sa1 objectAtIndex:i]!=[sa1 objectAtIndex:i-1])

{

[arr addObject:[sa1 objectAtIndex:i]];

[arr addObject:@"1"];

}

}

else

{

[arr addObject:[sa1 objectAtIndex:i]];

}

//count记录每个字母出现的次数,换到下一个字母时初始化为1

//flag标记是否遇到不同的字母,或所有字母是否读完

count=1;

flag=0;

for (int j=i; j<[sa1 count]-1; j++)

{

//判断相同字母总共有几个

if([[sa1 objectAtIndex:i] isEqualTo:[sa1 objectAtIndex:j+1]])

{

count++;

if(j+1==([sa1 count]-1))

{

flag++;

}

}

else

{

flag++;

}

//如果flag遇到不同的字母,或所有字母是否读完,把字母个数存入sa1

if(flag)

{

NSString *scount=[[NSString alloc] initWithFormat:@"%d",count];

[arr addObject:scount];

//如果j等于数组长度少1表明已经读取完毕

if(j!=[sa1 count]-1)

{

i=j;

}

break;

}

}

}

NSString *ss=[arr componentsJoinedByString:@""];

return ss;

}

/**************************************************************/

/*

传入一段字符串,字符串中可能有任何字符,要求找出字符串中最长的单词,即最长的连续英语字母,返回该单词的字母个数

比如: 输入 Yes, I hate the guy who make this fucking examination paper!

返回:11 即examination的长度。

+ (NSUInteger)numbersOfLongestWordInString:(NSString *)s;

*/

//测试代码

//        char inputChar[1000]={"Yes, I hate the guy who make this fucking examination paper!"};

//        char *c=inputChar;

//        printf("请输入一段话\n");

//        scanf("%[^\n]",c);

//        printf("%s\n",inputChar);

//        NSString *s=[[NSString alloc] initWithFormat:@"%s",c];

//        NSInteger n= [Test numbersOfLongestWordInString:s];

//        NSLog(@"其中最长的单词长度是:%lu\n",n);

+ (NSUInteger)numbersOfLongestWordInString:(NSString *)s

{

NSArray *arr=[s componentsSeparatedByString:@" "];    //将字符串分割成数组

NSMutableArray *mArr=[[NSMutableArray alloc] initWithArray:arr];   //把分割后的数组放入可变数字以便操作

char countLetter[100]={};    //记录每个单词的长度

//遍历数组,获取每一个单词

for (int i=0; i<[mArr count]; i++)

{

int count=10;

NSMutableArray *mArrSingleLetter=[[NSMutableArray alloc] init];

//将每一个单词单独存入一个可变数组,对每个字符进行判断,来得到单词的长度

for(int j=0;j<[mArr[i] length];j++)

{

NSMutableArray *c=[[NSMutableArray alloc] init];

NSRange range={j,1};    //定位到单个字符

[c addObject:[mArr objectAtIndex:i]];

//判断条件

if((([[[c objectAtIndex:0] substringWithRange:range] isGreaterThanOrEqualTo:@"a"])&&!([[[c objectAtIndex:0] substringWithRange:range] isLessThanOrEqualTo:@"z"]))

||(([[[c objectAtIndex:0] substringWithRange:range] isGreaterThanOrEqualTo:@"A"])&&!([[[c objectAtIndex:0] substringWithRange:range] isLessThanOrEqualTo:@"Z"])))

{

count++;

[mArrSingleLetter addObject:[[c objectAtIndex:0] substringWithRange:range]];

}

}

countLetter[i] = count;

}

//遍历数组找出单词最大长度的下标

int index=0;

for (int k=1; k<strlen(countLetter); k++)

{

if(countLetter[index]<countLetter[k])

{

index=k;

}

}

//返回单词长度

return countLetter[index]-10;

}

/**************************************************************/

/*

打印杨辉三角

输入 7

1

1 1

1 2  1

1 3  3  1

1 4  6  4  1

1 5 10 10  5 1

1 6 15 20 15 6 1

NSLog打印

+(void)printYangHuiTriangle:(int) n;

*/

//测试代码

//         [Test printYangHuiTriangle:7];

//方法实现

+(void)printYangHuiTriangle:(int) n

{

printf("请输入n:\n");

scanf("%d",&n);

if(n>0&&n<100)

{

NSMutableString *s=[[NSMutableString alloc] init];

int trangle[100][100]={};

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

{

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

{

if(i==j||j==0)

{

trangle[i][j]=1;

}else

{

trangle[i][j]=trangle[i-1][j]+trangle[i-1][j-1];

}

[s appendFormat:@"%3d",trangle[i][j]];

}

[s appendFormat:@"\n"];

}

NSLog(@"%@",s);

//        for(int k=0;k<n;k++)

//        {

//            for(int j=0;j<=k;j++)

//            {

//                printf("%3d",trangle[k][j]);

//            }

//            printf("\n");

//        }

}else

{

printf("输入数字有误!");

}

}

/**************************************************************/

/*

求一个字符串s的最大连续递减数字子串。

比如:

输入 f12345fffwf3210abcd 输出为 3210

输入 abcd765bbw135797531f12345 输出为 765

//如果有多个相同的最大数字串那么返回最后一个

+ (NSString *)subNumberString:(NSString *)string;

*/

//测试代码

//        NSString *s=[Test subNumberString:@"abcd765bbw135797531f12345"];

//        NSLog(@"%@",s);

//方法实现

+ (NSString *)subNumberString:(NSString *)string

{

//将字符串存入可变数组

NSMutableArray *mArr=[[NSMutableArray alloc] init];

for(int i=0;i<[string length];i++)

{

NSRange range={i,1};

[mArr addObject:[string substringWithRange:range]];

}

int indexStart=0,indexEnd=0;  //分别记录递减数字字符串的首尾下标

NSMutableArray *dLength=[[NSMutableArray alloc] init];    //记录最长递减数字字符串的长度

NSMutableArray *dKey=[[NSMutableArray alloc] init];    //记录最长递减字符串的开始位置

for (int i=0; i<[mArr count]; i++)   //遍历整个数组

{

if([[mArr objectAtIndex:i] intValue])   //第i个是否是字母,字母和数字0会被转化为0

{

//是数字时进入该分支

indexStart=i;    //首位初始化

indexEnd=i;    //尾位初始化

//另一个循环遍历从第一个数字开始到结束,中间如果出现递减数字字符串断裂也会跳出该循环

for(int j=i+1;j<[mArr count];j++)

{

if(![[mArr objectAtIndex:j] intValue])    //第j个是否为字母

{

//是字母或数字0时进入该循环

if([[mArr objectAtIndex:j]isEqualToString:@"0"])    //第j是否为0

{

//是数字0时进入该循环

if([[mArr objectAtIndex:j-1] intValue]-[[mArr objectAtIndex:j] intValue]==1)

{

//如果0的前一个是1,说明0也在递减字符串里

indexEnd++;    //尾位后移

}

else

{

break;

}

}

else    //第j个为字母

{

i++;    //从字母的下一个开始判断

break;

}

}

else    //第j为数字的情况

{

//判断首尾下标所指是否为递减字符串

if([[mArr objectAtIndex:j-1] intValue]-[[mArr objectAtIndex:j] intValue]==1)

{

indexEnd++;    //尾位后移

}

else

{

break;    //递减字符串中断

}

}

}

//判断是否找到递减字符串

if(indexEnd-indexStart>0)

{

NSString *length=[[NSString alloc] initWithFormat:@"%d",(indexEnd-indexStart+1)];

[dLength addObject:length];    //将递减字符串长度存入数组

NSString *key=[[NSString alloc] initWithFormat:@"%d",indexStart];

[dKey addObject:key];    //将递减字符串的下标存入数组

}

else

{

i=indexEnd;    //从中断点开始继续查找

}

}

}

//将所有递减字符串的起始位置和长度作为键值对存入可变字典

NSMutableDictionary *countIndexWithLength=[[NSMutableDictionary alloc] initWithObjects:dLength forKeys:dKey ];

NSArray *getAllKeys=[countIndexWithLength allKeys];    //取出所有键

int maxLength=0;    //记录最大长度

int start=0;    //记录最大长度值的字符串的开始位置

for(int i=0;i<[getAllKeys count];i++)

{

if(maxLength<=[[countIndexWithLength objectForKey:[getAllKeys objectAtIndex:i]] intValue])

{

maxLength=[[countIndexWithLength objectForKey:[getAllKeys objectAtIndex:i]] intValue];

start=[[getAllKeys objectAtIndex:i] intValue];

}

}

NSRange range={start,maxLength};    //定义范围用于取出范围内子串

NSMutableString *rst=[[NSMutableString alloc] initWithFormat:@"%@",[string substringWithRange:range]];

return rst;

}

/**************************************************************/

/*

对指定的字符串(单词间用任意的非字母分隔)进行分析,返回它里边所有单词出现的次数,返回值字字典 用单词作为key, 出现次数作为值(注意不都以空格分隔,是任意的非字母字符)

+(NSDictionary*)wordCount:(NSString*)fileContent;

*/

//测试代码

//        NSString *fileWord=[[NSString alloc] initWithContentsOfFile:PATH encoding:NSUTF8StringEncoding error:nil];

//        NSMutableString *inputString=[[NSMutableString alloc] initWithString:fileWord];

//        NSMutableDictionary *mDic=[[NSMutableDictionary alloc]initWithDictionary:[Test wordCount:inputString]];

//        //NSLog(@"%@",inputString);

//        NSLog(@"%@",mDic);

//方法实现

+(NSDictionary*)wordCount:(NSString*)fileContent

{

NSMutableArray *dLength=[[NSMutableArray alloc] init];

NSMutableArray *dKey=[[NSMutableArray alloc] init];    //存放所有不重复的单词

NSMutableArray *mArr=[[NSMutableArray alloc] init];    //存放相应单词重复的次数

int countAllLetter=0;

int startIndex=0,endIndex=0;

//将字符串分割存入可变数组mArr中

for(int i=0;i<[fileContent length]-1;i++)

{

startIndex=endIndex;

for(int j=startIndex;j<[fileContent length];j++)

{

NSRange range={j,1};

if((([[fileContent substringWithRange:range] isGreaterThanOrEqualTo:@"a"])&&([[fileContent substringWithRange:range] isLessThanOrEqualTo:@"z"]))

||(([[fileContent substringWithRange:range] isGreaterThanOrEqualTo:@"A"])&&([[fileContent substringWithRange:range] isLessThanOrEqualTo:@"Z"])))

{

endIndex++;

continue;

}

else

{

break;

}

}

NSRange range1={startIndex,endIndex-startIndex};

if(startIndex!=endIndex)    //判断结束,首下标和尾下标指向同一处

{

[mArr addObject:[fileContent substringWithRange:range1]];

}

endIndex++;

}

//遍历所有单词

for(int i=0;i<[mArr count];i++)

{

countAllLetter=1;

NSString *everyLetter=[[NSString alloc] initWithFormat:@"%@",[mArr objectAtIndex:i]];

//从某个单词开始,往后遍历寻找相同的单词

for(int j=i+1;j<[mArr count];j++)

{

if([everyLetter isEqualToString:[mArr objectAtIndex:j]])

{

countAllLetter++;

}

}

//判断某个单词是否已经数过个数

int flag=0;

for(int i=0;i<[dKey count];i++)

{

if(everyLetter == [dKey objectAtIndex:i])

{

flag++;

break;

}

}

//如果存过某个单词,则不再存储

if(!flag)

{

NSString *count=[[NSString alloc] initWithFormat:@"%d",countAllLetter];

[dLength addObject:count];

[dKey addObject:everyLetter];

}

}

//添加进字典

NSMutableDictionary *mDic=[[NSMutableDictionary alloc] initWithObjects:dLength forKeys:dKey];

return mDic;

}

/**************************************************************/

/*

剔除字符串中的全部空格

传入:@"welcome to        qianfeng"

返回:@"welcometoqianfeng"

+(NSString *)stringWithoutSpaceInString:(NSString *)string;

*/

//测试代码

//        NSString *s=[[NSString alloc] initWithFormat:@"%@",[Test stringWithoutSpaceInString:@"welcome to        qianfeng"]];

//        NSLog(@"%@",s);

//方法实现

+(NSString *)stringWithoutSpaceInString:(NSString *)string

{

NSMutableString *mStr=[[NSMutableString alloc] init];

for(int i=0;i<[string length];i++)

{

NSRange range={i,1};

if(![[string substringWithRange:range] isEqualTo:@" "])

{

[mStr appendFormat:@"%@",[string substringWithRange:range]];

}

}

NSString *s=[[NSString alloc] initWithString:mStr];

return s;

}

/**************************************************************/

/*

判断字符串str是否是合法的C变量

变量名只能由字母、数字、下划线_构成,并且以字母和下划线_开头。

实际上就是判断是否是一个合法的标识符 不考虑关键字情况

如:@"_ios" 是合法的变量名

@"1oc" 不合法

@"123" 不合法

@"xiaohuang_"  合法

@"_UI*" 不合法

@"#OC"  不合法

+ (BOOL) isCValidVar:(NSString *)str;

*/

//测试代码

//        BOOL b=[Test isCValidVar:@"#OC"];

//        if(b)

//        {

//            NSLog(@"命名合法");

//        }else

//        {

//            NSLog(@"命名不合法");

//        }

//方法实现

+ (BOOL) isCValidVar:(NSString *)str

{

NSString *str1=[[NSString alloc] initWithFormat:@"abcdrfghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_"];

NSString *str2=[[NSString alloc] initWithFormat:@"1234567890"];

NSMutableArray *mArr=[[NSMutableArray alloc] init];

for (int i=0; i<[str length]; i++)

{

NSRange range={i,1};

[mArr addObject:[str substringWithRange:range]];

}

NSMutableArray *mArr1=[[NSMutableArray alloc] init];

for (int i=0; i<[str1 length]; i++)

{

NSRange range={i,1};

[mArr1 addObject:[str1 substringWithRange:range]];

}

NSMutableArray *mArr2=[[NSMutableArray alloc] init];

for (int i=0; i<[str2 length]; i++)

{

NSRange range={i,1};

[mArr2 addObject:[str2 substringWithRange:range]];

}

for(int i=0;i<[mArr count];i++)

{

int flag=0;

for (int j=0; j<[mArr1 count]; j++)

{

if([[mArr objectAtIndex:i] isEqual:[mArr1 objectAtIndex:j]])

{

flag=1;

break;

}

}

if(flag==0)

{

return 0;

}

if(i==0)

{

int flag=0;

for(int k=0; k<[mArr2 count]; k++)

{

if([[mArr objectAtIndex:i] isEqual:[mArr2 objectAtIndex:k]])

{

flag=1;

break;

}

}

if(flag)

{

return 0;

}

}

}

return 1;

}

/**************************************************************/

/*

对称的数组

传入一个数组,其元素类型与个数皆未知,返回新数组,由原数组的元素正序反序拼接而成。

//参数arr 表示原数组地址

//返回值是新数组的地址

传入:@[@"one", @"Two", @"Three"]

返回:@[@"one", @"Two", @"Three", @"Three", @"Two", @"one"]

+ (NSArray *)symmetryArray:(NSArray *)arr;

*/

//测试代码

//        NSArray *arr=@[@"One",@"Two",@"Three"];

//        NSMutableArray *mArr=[[NSMutableArray alloc] init];

//        [mArr setArray:[Test symmetryArray:arr]];

//        NSLog(@"%@",mArr);

//方法实现

+ (NSArray *)symmetryArray:(NSArray *)arr

{

NSMutableArray *mArr=[[NSMutableArray alloc]initWithArray:arr];

unsigned long len=[arr count]-1;

for (int i=(int)len; i>=0; i--)

{

[mArr addObject:[arr objectAtIndex:i]];

}

NSArray *arr1=[[NSArray alloc] initWithArray:mArr];

return arr1;

}

/**************************************************************/

/*

将字符串后移

将字符串向右移动指定位数,首尾循环

如:string传入@"welcometoqianfeng", bits传入4

返回:@"fengwelcometoqian"

+ (NSString *)displacemetString:(NSString *)string forBits:(NSUInteger)bits;

*/

//测试代码

//        NSString *s=[[NSString alloc] initWithFormat:@"%@",[Test displacemetString:@"welcometoqianfeng" forBits:4]];

//        NSLog(@"%@",s);

//方法实现

+ (NSString *)displacemetString:(NSString *)string forBits:(NSUInteger)bits

{

unsigned long n=bits%[string length];

NSMutableArray *mArr=[[NSMutableArray alloc] init];

for(unsigned long i=[string length]-n; i<[string length]; i++)

{

NSRange range={i,1};

[mArr addObject:[string substringWithRange:range]];

}

for (unsigned long i=0; i<[string length]-n; i++)

{

NSRange range={i,1};

[mArr addObject:[string substringWithRange:range]];

}

NSString *s=[mArr componentsJoinedByString:@""];

return s;

}

/**************************************************************/

/*

找出出现最多的字母

找出字符串中出现次数最多的字母,将该字母和字母出现的次数拼接成一个新字符串

返回新字符串。

传入:@"WelcomeToQianfeng"

返回:@"e3"

+ (NSString *)maxTimesCharacterOfString:(NSString *)string;

*/

//测试代码

//        NSString *s=[[NSString alloc] initWithFormat:@"%@",[Test maxTimesCharacterOfString:@"WelcomeToqianfeng"]];

//        NSLog(@"%@",s);

//方法实现

+ (NSString *)maxTimesCharacterOfString:(NSString *)string

{

NSMutableArray *dLength=[[NSMutableArray alloc] init];

NSMutableArray *dKey=[[NSMutableArray alloc] init];    //存放所有不重复的单词

NSMutableArray *mArr=[[NSMutableArray alloc] init];    //存放相应单词重复的次数

int countAllLetter=0;

//将字符串分割存入可变数组mArr中

for(int i=0;i<[string length];i++)

{

NSRange range={i,1};

[mArr addObject:[string substringWithRange:range]];

}

//遍历所有单词

for(int i=0;i<[mArr count];i++)

{

countAllLetter=1;

NSString *everyLetter=[[NSString alloc] initWithFormat:@"%@",[mArr objectAtIndex:i]];

//从某个字母开始,往后遍历寻找相同的字母

for(int j=i+1;j<[mArr count];j++)

{

if([everyLetter isEqualToString:[mArr objectAtIndex:j]])

{

countAllLetter++;

}

}

//判断某个单词是否已经数过个数

int flag=0;

for(int i=0;i<[dKey count];i++)

{

if(everyLetter == [dKey objectAtIndex:i])

{

flag++;

break;

}

}

//如果存过某个单词,则不再存储

if(!flag)

{

NSString *count=[[NSString alloc] initWithFormat:@"%d",countAllLetter];

[dLength addObject:count];

[dKey addObject:everyLetter];

}

}

//添加进字典

NSMutableDictionary *mDic=[[NSMutableDictionary alloc] initWithObjects:dLength forKeys:dKey];

int maxCount=0,index=0;

NSArray *arrValue=[mDic allValues];

NSArray *arrkey=[mDic allKeys];

for(int i=0;i<[arrValue count]; i++)

{

if(maxCount< [[arrValue objectAtIndex:i] intValue])

{

maxCount =[[arrValue objectAtIndex:i] intValue];

index=i;

}

}

NSMutableString *s=[[NSMutableString alloc]initWithFormat:@"%@%d",[arrkey objectAtIndex:index],maxCount];

return s;

}

/**************************************************************/

/*

将字符中单词用空格隔开

已知传入的字符串中只有字母,每个单词的首字母大写,请将每个单词用空格隔开

只保留第一个单词的首字母大写

传入:@"HelloMyWorld"

返回:@"Hello my world"

+ (NSString *)separateString:(NSString *)string;

+ (void)test;

*/

//测试代码

//        NSString *s=[[NSString alloc]initWithFormat:@"%@",[Test separateString:@"HelloMyWorld"]];

//        NSLog(@"%@",s);

//方法实现

+ (NSString *)separateString:(NSString *)string

{

//定义可变数组接收所有字符

NSMutableArray *mArr=[[NSMutableArray alloc] init];

//遍历字符串

for(int i=0;i<[string length];i++)

{

NSRange range={i,1};

NSString *s=[[NSString alloc]initWithFormat:@"%@",[string substringWithRange:range]];

//如果是大写字母并且是第一个的话,直接存储,非第一个就要先添加空格再把大写转小写存入

if([s isGreaterThanOrEqualTo:@"A"]&&[s isLessThanOrEqualTo:@"Z"])

{

if(i==0)

{

[mArr addObject:s];

}else

{

[mArr addObject:@" "];

[mArr addObject:[s lowercaseString]];

}

}

//如果是小写字母则直接存入,非字母字符不会读入

else if([s isGreaterThanOrEqualTo:@"a"]&&[s isLessThanOrEqualTo:@"z"])

{

[mArr addObject:s];

}

}

NSString *rst=[mArr componentsJoinedByString:@""];

return rst;

}

oc字符串+数组+字典操作题目的更多相关文章

  1. IOS NS 字符串 数组 字典 文件 动态 静态 操作

    ios 常用字符串的操作   //将NSData转化为NSString        NSString* str = [[NSString alloc] initWithData:response e ...

  2. Swift学习—字符串&数组&字典

    字符串 OC和Swift中字符串的区别 在OC中字符串类型时NSString,在Swift中字符串类型是String OC中字符串@"",Swift中字符串"" ...

  3. Swift(一,创建对象,类型推导,基本运算,逻辑,字符串,数组,字典)

    swift用起来刚开始感觉有点怪怪的,但用了一段时间觉得还是挺好用的,哈哈.毕竟都是要有一个过程的嘛. 我就写一些自己在使用swift的时候的注意点吧,如有不正之处,还请指正! 一.在开发中优先使用常 ...

  4. OC基础:数组.字典.集 分类: ios学习 OC 2015-06-18 18:58 47人阅读 评论(0) 收藏

    ==============NSArray(不可变数组)=========== NSArray,继承自NSObject  用来管理(储存)一些有序的对象,不可变数组. 创建一个空数组 NSArray ...

  5. iOS 数组字典操作

    iOS开发中需要大量对dictionary和array进行操作,因此我们需要一种更加安全可靠的操作方法来避免不必要的crash.当然可以通过自定义dictionary 和array重载增删改查的方法来 ...

  6. OC ---- 字符串 数组 iOS学习-----细碎知识点总结

    NSString *urlString = [NSString stringWithFormat:@"http://www.apple.com"];        // 获取字符串 ...

  7. Object-C 语法 字符串 数组 字典 和常用函数 学习笔记

    字符串 //取子字符串 NSString *str1=@"今天的猪肉真贵,200块一斤"; NSString *sub1=[str1 substringFromIndex:4]; ...

  8. C++下面关于字符串数组的一些操作

    今天在写一个搜索引擎的分词系统,是很简单的那种,但是居然费了我一天的时间还没完成,晚上估计还得弄一会了,但是在这个过程中,遇到了集中关于字符串数组的操作,值得和大家分享一下. 首先是关于统计字符串数组 ...

  9. OC: 数组、集合、字典

    数组.字典.集合 参考1   参考2  参考3  参考4  参考5 NSArray * nn  = @[@"元素1",@"元素2",@"元素3&quo ...

随机推荐

  1. 测试ssh框架中hibernate的事务

    <!-- 配置切面 --> <aop:config> <aop:pointcut expression="execution(* com.xxx.lobs.ma ...

  2. makefile使用注意点

    1. 小心空格 变量赋值a:=   b, 不会将b前面的空格赋值给a 大部分函数调用,特别是$(call func, param) 如果参数前面有空格,则会将空格连同参数一起传入.因此要特别小心. 使 ...

  3. 结构体成员管理AVClass AVOption之1AVClass

    AVOption用于描述结构体中的成员变量.它最主要的作用可以概括为两个字:“赋值”. 一个AVOption结构体包含了变量名称,简短的帮助,取值等信息. 所有和AVOption有关的数据都存储在AV ...

  4. Easyui tree方法扩展getImperfectCheck

    $.extend($.fn.tree.methods, { getImperfectCheck : function (jq) { var checked = jq.find("span.t ...

  5. QQ宠物怀念版H5

    <QQ宠物>相伴十三载 哇!明信片邮到了!!开心ヽ(○^㉨^)ノ♪ 大乐斗Ⅱ 怀念一波...

  6. mysql UNION all 实现不对称数据统计

    当统计多条的三个参数在不同时间段的数据的sum,又只能写在同一个sql上时,可以考虑union all三次查询, select * from ( select kk.a_time as dates,k ...

  7. 第8章 Docker Compose 相关问题

    8.1 你那个LNMP例子中的docker-compose.yml中有好多networks,都是什么意思啊? 我写的 LNMP 多容器互通的例子:https://coding.net/u/twang2 ...

  8. Lucene索引文件组成

    Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙. 当我们真正进入到Lucene源代码之中的时候,我们会发现: Lucene的索引过程, ...

  9. log4j日志文件乱码问题的解决方法

    近日在AIX上用log4j打印日志,出现乱码,经过努力解决问题. 症状:在默认语言非中文(或者说默认语言不支持中文的)的Windows.Linux.Unix上,用log4j打印日志,出现乱码,常见的就 ...

  10. SVG 与 Canvas:如何选择

    SVG 与 Canvas:如何选择 61(共 69)对本文的评价是有帮助 - 评价此主题   本主题一开始将对 SVG 与 Canvas 进行简要比较,接下来会讨论大量的比较代码示例,如光线跟踪和绿屏 ...