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;
}
oc字符串+数组+字典操作题目的更多相关文章
- IOS NS 字符串 数组 字典 文件 动态 静态 操作
ios 常用字符串的操作 //将NSData转化为NSString NSString* str = [[NSString alloc] initWithData:response e ...
- Swift学习—字符串&数组&字典
字符串 OC和Swift中字符串的区别 在OC中字符串类型时NSString,在Swift中字符串类型是String OC中字符串@"",Swift中字符串"" ...
- Swift(一,创建对象,类型推导,基本运算,逻辑,字符串,数组,字典)
swift用起来刚开始感觉有点怪怪的,但用了一段时间觉得还是挺好用的,哈哈.毕竟都是要有一个过程的嘛. 我就写一些自己在使用swift的时候的注意点吧,如有不正之处,还请指正! 一.在开发中优先使用常 ...
- OC基础:数组.字典.集 分类: ios学习 OC 2015-06-18 18:58 47人阅读 评论(0) 收藏
==============NSArray(不可变数组)=========== NSArray,继承自NSObject 用来管理(储存)一些有序的对象,不可变数组. 创建一个空数组 NSArray ...
- iOS 数组字典操作
iOS开发中需要大量对dictionary和array进行操作,因此我们需要一种更加安全可靠的操作方法来避免不必要的crash.当然可以通过自定义dictionary 和array重载增删改查的方法来 ...
- OC ---- 字符串 数组 iOS学习-----细碎知识点总结
NSString *urlString = [NSString stringWithFormat:@"http://www.apple.com"]; // 获取字符串 ...
- Object-C 语法 字符串 数组 字典 和常用函数 学习笔记
字符串 //取子字符串 NSString *str1=@"今天的猪肉真贵,200块一斤"; NSString *sub1=[str1 substringFromIndex:4]; ...
- C++下面关于字符串数组的一些操作
今天在写一个搜索引擎的分词系统,是很简单的那种,但是居然费了我一天的时间还没完成,晚上估计还得弄一会了,但是在这个过程中,遇到了集中关于字符串数组的操作,值得和大家分享一下. 首先是关于统计字符串数组 ...
- OC: 数组、集合、字典
数组.字典.集合 参考1 参考2 参考3 参考4 参考5 NSArray * nn = @[@"元素1",@"元素2",@"元素3&quo ...
随机推荐
- 测试ssh框架中hibernate的事务
<!-- 配置切面 --> <aop:config> <aop:pointcut expression="execution(* com.xxx.lobs.ma ...
- makefile使用注意点
1. 小心空格 变量赋值a:= b, 不会将b前面的空格赋值给a 大部分函数调用,特别是$(call func, param) 如果参数前面有空格,则会将空格连同参数一起传入.因此要特别小心. 使 ...
- 结构体成员管理AVClass AVOption之1AVClass
AVOption用于描述结构体中的成员变量.它最主要的作用可以概括为两个字:“赋值”. 一个AVOption结构体包含了变量名称,简短的帮助,取值等信息. 所有和AVOption有关的数据都存储在AV ...
- Easyui tree方法扩展getImperfectCheck
$.extend($.fn.tree.methods, { getImperfectCheck : function (jq) { var checked = jq.find("span.t ...
- QQ宠物怀念版H5
<QQ宠物>相伴十三载 哇!明信片邮到了!!开心ヽ(○^㉨^)ノ♪ 大乐斗Ⅱ 怀念一波...
- mysql UNION all 实现不对称数据统计
当统计多条的三个参数在不同时间段的数据的sum,又只能写在同一个sql上时,可以考虑union all三次查询, select * from ( select kk.a_time as dates,k ...
- 第8章 Docker Compose 相关问题
8.1 你那个LNMP例子中的docker-compose.yml中有好多networks,都是什么意思啊? 我写的 LNMP 多容器互通的例子:https://coding.net/u/twang2 ...
- Lucene索引文件组成
Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙. 当我们真正进入到Lucene源代码之中的时候,我们会发现: Lucene的索引过程, ...
- log4j日志文件乱码问题的解决方法
近日在AIX上用log4j打印日志,出现乱码,经过努力解决问题. 症状:在默认语言非中文(或者说默认语言不支持中文的)的Windows.Linux.Unix上,用log4j打印日志,出现乱码,常见的就 ...
- SVG 与 Canvas:如何选择
SVG 与 Canvas:如何选择 61(共 69)对本文的评价是有帮助 - 评价此主题 本主题一开始将对 SVG 与 Canvas 进行简要比较,接下来会讨论大量的比较代码示例,如光线跟踪和绿屏 ...