oc字符串+数组+字典操作题目

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;

}

posted @ 2015-08-09 17:56  PaulpauL  阅读(1332)  评论(0编辑  收藏  举报