zoukankan      html  css  js  c++  java
  • 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("请输入一段话 ");

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

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

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

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

    //        NSLog(@"其中最长的单词长度是:%lu ",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: ");

        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:@" "];

            }

            NSLog(@"%@",s);

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

    //        {

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

    //            {

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

    //            }

    //            printf(" ");

    //        }

        }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;

    }

    http://www.cnblogs.com/PaulpauL/ 版权声明:本文为博主原创文章,未经博主允许不得转载。
  • 相关阅读:
    ACM-ICPC 2018 徐州赛区网络预赛 J. Maze Designer (最大生成树+LCA)
    ACM-ICPC 2018 沈阳赛区网络预赛 F. Fantastic Graph (上下界网络流)
    ACM-ICPC 2018 沈阳赛区网络预赛 G. Spare Tire (容斥原理)
    HDU 3081 Marriage Match II (二分+并查集+最大流)
    ISAP模板
    POJ
    青春
    登高有感
    那年今日
    NOIP200101数的计算
  • 原文地址:https://www.cnblogs.com/PaulpauL/p/4715543.html
Copyright © 2011-2022 走看看