与oc字符串有关的习题以及答案
来源:互联网 发布:行测怎么提速 知乎 编辑:程序博客网 时间:2024/05/16 17:56
// Copyright (c) 2015年 JiWuChao. All rights reserved.
//
#import "JWCTest.h"
@implementation JWCTest
/*
1. 判断中间目录是否存在
- (BOOL)isPath:(NSString *)path includeMiddleDirectory:(NSString *)dir{
NSInteger ret = 0;
NSArray *arr = [path componentsSeparatedByString:@"/"];
for (int i = 0; i < arr.count; i ++) {
if ([[arr objectAtIndex:i] compare:dir] == NSOrderedSame) {
ret = YES;
break;
}
else
ret = NO;
}
return ret ;
}
/*
2.将一个字符串数组中的元素组合成一个合法路径(10分)
已知一个数组存放的是目录名字,要求组合成一个合法路径
比如:数组中存放的是 hh JJ iOS
返回 /hh/JJ/iOS
*/
/*
思路:
把数组中的每一个元素赋值给一个可变字符串,然后在可变字符串中的第一个元素位置添加一个 ’/‘,然后把添加过‘/’的可变字符串依次添加到可变数组当中,添加完之后,再把数组根据空格分隔成为字符串输出,完成所需的效果
*/
- (NSString *)joinPathOfComponents:(NSArray *)comp{
NSMutableString *str = [[NSMutableString alloc]init];
NSMutableArray *arr = [[NSMutableArray alloc]init];
for (int i = 0; i < comp.count; i++) {
str=[NSMutableString stringWithString: comp[i]];
[str insertString:@"/" atIndex:0];
[arr addObject:str];
}
// NSLog(@"%@",arr);
NSString *str1 = [arr componentsJoinedByString:@""];
return str1;
}
/*3. 传入一段字符串,字符串中可能有任何字符,要求找出字符串中最长的单词,即最长的连续英语字母,返回该单词的字母个数(20分)
比如:
输入 Yes, I hate the guy who make this fucking examination paper!
返回:11 即examination的长度。
*/
/*
本题的主要方法是在字符串划分成数组的时候的依据,是空格,逗号,和感叹号,分离之后就可以根据数组的每个元素的长来求出最长的长度。
其中,划分的时候原来都用componentsSeparatedByString,这只能根据一个元素划分,在此运用componentsSeparatedByCharactersInSet:它需要的参数是一个集合,这就可以把空格,逗号,和感叹号做成一个集合,一次性的就可以把字符串分成数组
*/
-(NSUInteger)numbersOfLongestWordInString:(NSString *)s{
NSInteger count = 0;
NSArray *arr = [s componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@", !"]];
// NSLog(@"arr=%@",arr);
for (NSString * obj in arr) {
if (obj.length > count) {
count = obj.length;
}
}
return count;
}
/*
4.输入左边数字就输出右边对应字母 (20分)
1 - A
2 - B
…..
26 - Z
27 - AA
52 - AZ
53 - BA
54 - BB
….
702 - ZZ
…
8888888888-ABTCNCWV
输入左边数字就输出右边对应字母;
*/
- (void)printEnglish:(NSInteger) n{
NSMutableString *muStr = [[NSMutableString alloc]init];
NSMutableString *muStr2 = [[NSMutableString alloc]init];
NSInteger m1;
while (n) {
m1 = (n-1)%26;
n = (n-1)/26;
[ muStr appendFormat: @"%c",(unichar)(m1+65)];
}
for (NSInteger i = muStr.length-1; i >=0 ; i--) {
[muStr2 appendFormat:@"%c",[muStr characterAtIndex:i] ];
}
NSLog(@"第四题:%@",muStr2);
}
/*
5.将字符串中单词后移(10分)
已知字符串中的单词以空格隔开,将字符串向右移动指定单词数,首尾循环
如:string传入@"Hi man welcome to my Home", bits传入2
返回:@"to my Home Hi man welcome"
*/
- (NSString *)displacemetWordInString:(NSString *)string forBits:(NSUInteger)bits{
//先把字符串根据空格分开
NSArray *arr =[string componentsSeparatedByString:@" "];
NSMutableArray *muArr = [[NSMutableArray alloc]init];
NSInteger i = 0,j = 0;
//从数组最后取出bits个元素循环放在数组中
for ( i= arr.count-1; i >= 0&&j < bits; j++,i--) {
[muArr addObject:arr[i]];
// NSLog(@"%@",muArr);
}
//由于循环放到数组中的元素是从原数组中的最后一位依次取出的,和题意不符,所以需要把顺序交换过来
for (NSInteger a = 0; a <= muArr.count/2 ; a++) {
[muArr exchangeObjectAtIndex:a withObjectAtIndex:[muArr count]-1];
}
//把原数组中剩余的元素放到数组中去
for (NSInteger a = 0; a <= arr.count-1-bits; a++) {
[muArr addObject:arr[a]];
}
//NSLog(@"%@",muArr);
//把数组根据空格合并
NSString *st = [muArr componentsJoinedByString:@" "];
return st;
}
/*
6.找出出现最多的单词 (10分)
已知字符串中的单词以空格隔开,找出字符串中出现次数最多的单词,将该单词和单词出现的次数
拼接成一个新字符串,返回新字符串。
传入:@"drink your drink don't drink others drink"
返回:@"drink4"
*/
- (NSString *)mostWordInString:(NSString *)String{
NSArray *arr= [[NSArray alloc]init];
arr = [String componentsSeparatedByString:@" "];
// NSLog(@"%@",arr);
NSInteger maxCou = 0;
NSMutableArray *strArr = [[NSMutableArray alloc]init];
for (NSInteger j = 0; j < arr.count ; j++) {
NSInteger count = 0;
for (NSInteger i = 0; i < arr.count; i++) {
if ([arr[i] compare:arr[j]]==NSOrderedSame) {
count++;
}
if (count > maxCou) {
maxCou = count;
[strArr addObject:arr[j]];
}
}
}
NSString *ss = [NSString stringWithFormat:@"%@%lu",[strArr lastObject],maxCou];
return ss ;
}
/*
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打印
*/
- (void)printYangHuiTriangle:(int) n{
int a[100][100];
for (int i = 0 ; i < n; i++) {
for (int j = 0 ; j <= i; j++) {
if (i ==j||(j==0&&i!=j)) {
a[i][j] = 1;
}else {
a[i][j] = a[i-1][j]+a[i-1][j-1];
}
}
}
for (int i = 0 ; i < n; i++) {
for (int j = 0 ; j <= i; j++){
printf("%d\t",a[i][j]);
}
printf("\n");
}
}
/*
8 传入一段字符串,把相同的字符按出现顺序,归在一起,并压缩(20分)
比如:
输入 SamSameCome
SamSameCome
输出:
S2a2m3e2C1o1
返回值为压缩后的结果,比如S2a2m3e2C1o1
*/
- (NSString *)compressString:(NSString *)s{
NSMutableString *muStr = [[NSMutableString alloc]init];
//取出字符串的第i个元素,赋值给ch1
for (int i = 0; i < s.length; i++) {
unichar ch1 = [s characterAtIndex:i];
NSInteger count = 0;
//计算出ch1在字符串中出现的次数,用count记录
for (int j = 0; j < s.length; j++) {
unichar ch2 = [s characterAtIndex:j];
if (ch1 == ch2) {
count++;
}
}
//把字符和它出现的次数count合成一个字符串
NSString *ss = [NSString stringWithFormat:@"%C%ld",ch1,(long)count];
//如果没有存在则把字符和它的出现的次数添加到可变字符串中
if ([muStr containsString:ss] == 0) {
[muStr appendString:ss];
}
}
return muStr ;
}
/*
9 根据输入的内容用NSLog打印出菱形(10分)
*/
//count 表示正方形边长
//flagString 组成菱4形的边
//blankString 组成背景正方形
//比如 [class print:5 blankString:@“+”flagString:@“#”];
/*
+ + # + +
+ # + # +
# + + + #
+ # + # +
+ + # + +
*/
-(void)print:(NSInteger)count blankString:(NSString*)blankString flagString:(NSString*)flagString{
NSMutableString *muStr = [[NSMutableString alloc]init];
for (int i = 0; i < count; i++) {
for (int j = 0 ; j < count; j++) {
if ((i+j == (count - 1)/2)||(j-i == (count - 1)/2)||(i-j==(count - 1)/2)||(i+j==count+1)) {
[muStr appendFormat:@"%@ ",flagString];
}else{
[muStr appendFormat:@"%@ ",blankString];
}
}
[muStr appendFormat:@"%c",'\n'];
}
NSLog(@"第九题:\n%@",muStr);
}
/*
10. 求一个字符串s的最大连续递减数字子串。(20)
比如:
输入 12345986fffwf3210abcd 输出为 3210
输入 abcd765bbw135797531f12345 输出为 765
//如果有多个相同的最大数字串那么返回最后一个
*/
- (NSString *)subNumberString:(NSString *)string{
NSMutableString *muStr = [[NSMutableString alloc]initWithString:string];
NSInteger count = 0;
NSInteger index = 0;
//先判断字符串中是否是字符,如果是字符则换成空格
for (int i = 0; i < muStr.length; i++) {
if ([muStr characterAtIndex:i] > '9' || [muStr characterAtIndex:i] <'0') {
[muStr replaceCharactersInRange:NSMakeRange(i, 1) withString:@" "];
}
}
//根据空格把字符串分成数组
NSArray *arr = [muStr componentsSeparatedByString:@" "];
for (int i = 0; i < arr.count; i++) {
NSInteger flag = 1;//设置一个标记
//如果数组中的第i个元素不为空
if ([arr[i]compare:@"" ]!=NSOrderedSame) {
//数组中的元素是字符串,让字符串中的每一个元素进行比较
for (int j = 0; j < [arr[i] length]-1; j++) {
//如果是前面的一位小于等于后面的一位,则跳出循环,并且把flag标记为0
if ([arr[i] characterAtIndex:j] <= [arr[i] characterAtIndex:j+1]) {
flag = 0;
break;
}
}
}
//判断如果flag不为0和比较已存在的值的大小满足条件则返回下标
if (flag == 1 && [arr[i] integerValue] >= count) {
count = [arr[i] integerValue];
index = i;
}
}
return arr[index];
}
//
#import "JWCTest.h"
@implementation JWCTest
/*
1. 判断中间目录是否存在
- (BOOL)isPath:(NSString *)path includeMiddleDirectory:(NSString *)dir{
NSInteger ret = 0;
NSArray *arr = [path componentsSeparatedByString:@"/"];
for (int i = 0; i < arr.count; i ++) {
if ([[arr objectAtIndex:i] compare:dir] == NSOrderedSame) {
ret = YES;
break;
}
else
ret = NO;
}
return ret ;
}
/*
2.将一个字符串数组中的元素组合成一个合法路径(10分)
已知一个数组存放的是目录名字,要求组合成一个合法路径
比如:数组中存放的是 hh JJ iOS
返回 /hh/JJ/iOS
*/
/*
思路:
把数组中的每一个元素赋值给一个可变字符串,然后在可变字符串中的第一个元素位置添加一个 ’/‘,然后把添加过‘/’的可变字符串依次添加到可变数组当中,添加完之后,再把数组根据空格分隔成为字符串输出,完成所需的效果
*/
- (NSString *)joinPathOfComponents:(NSArray *)comp{
NSMutableString *str = [[NSMutableString alloc]init];
NSMutableArray *arr = [[NSMutableArray alloc]init];
for (int i = 0; i < comp.count; i++) {
str=[NSMutableString stringWithString: comp[i]];
[str insertString:@"/" atIndex:0];
[arr addObject:str];
}
// NSLog(@"%@",arr);
NSString *str1 = [arr componentsJoinedByString:@""];
return str1;
}
/*3. 传入一段字符串,字符串中可能有任何字符,要求找出字符串中最长的单词,即最长的连续英语字母,返回该单词的字母个数(20分)
比如:
输入 Yes, I hate the guy who make this fucking examination paper!
返回:11 即examination的长度。
*/
/*
本题的主要方法是在字符串划分成数组的时候的依据,是空格,逗号,和感叹号,分离之后就可以根据数组的每个元素的长来求出最长的长度。
其中,划分的时候原来都用componentsSeparatedByString,这只能根据一个元素划分,在此运用componentsSeparatedByCharactersInSet:它需要的参数是一个集合,这就可以把空格,逗号,和感叹号做成一个集合,一次性的就可以把字符串分成数组
*/
-(NSUInteger)numbersOfLongestWordInString:(NSString *)s{
NSInteger count = 0;
NSArray *arr = [s componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@", !"]];
// NSLog(@"arr=%@",arr);
for (NSString * obj in arr) {
if (obj.length > count) {
count = obj.length;
}
}
return count;
}
/*
4.输入左边数字就输出右边对应字母 (20分)
1 - A
2 - B
…..
26 - Z
27 - AA
52 - AZ
53 - BA
54 - BB
….
702 - ZZ
…
8888888888-ABTCNCWV
输入左边数字就输出右边对应字母;
*/
- (void)printEnglish:(NSInteger) n{
NSMutableString *muStr = [[NSMutableString alloc]init];
NSMutableString *muStr2 = [[NSMutableString alloc]init];
NSInteger m1;
while (n) {
m1 = (n-1)%26;
n = (n-1)/26;
[ muStr appendFormat: @"%c",(unichar)(m1+65)];
}
for (NSInteger i = muStr.length-1; i >=0 ; i--) {
[muStr2 appendFormat:@"%c",[muStr characterAtIndex:i] ];
}
NSLog(@"第四题:%@",muStr2);
}
/*
5.将字符串中单词后移(10分)
已知字符串中的单词以空格隔开,将字符串向右移动指定单词数,首尾循环
如:string传入@"Hi man welcome to my Home", bits传入2
返回:@"to my Home Hi man welcome"
*/
- (NSString *)displacemetWordInString:(NSString *)string forBits:(NSUInteger)bits{
//先把字符串根据空格分开
NSArray *arr =[string componentsSeparatedByString:@" "];
NSMutableArray *muArr = [[NSMutableArray alloc]init];
NSInteger i = 0,j = 0;
//从数组最后取出bits个元素循环放在数组中
for ( i= arr.count-1; i >= 0&&j < bits; j++,i--) {
[muArr addObject:arr[i]];
// NSLog(@"%@",muArr);
}
//由于循环放到数组中的元素是从原数组中的最后一位依次取出的,和题意不符,所以需要把顺序交换过来
for (NSInteger a = 0; a <= muArr.count/2 ; a++) {
[muArr exchangeObjectAtIndex:a withObjectAtIndex:[muArr count]-1];
}
//把原数组中剩余的元素放到数组中去
for (NSInteger a = 0; a <= arr.count-1-bits; a++) {
[muArr addObject:arr[a]];
}
//NSLog(@"%@",muArr);
//把数组根据空格合并
NSString *st = [muArr componentsJoinedByString:@" "];
return st;
}
/*
6.找出出现最多的单词 (10分)
已知字符串中的单词以空格隔开,找出字符串中出现次数最多的单词,将该单词和单词出现的次数
拼接成一个新字符串,返回新字符串。
传入:@"drink your drink don't drink others drink"
返回:@"drink4"
*/
- (NSString *)mostWordInString:(NSString *)String{
NSArray *arr= [[NSArray alloc]init];
arr = [String componentsSeparatedByString:@" "];
// NSLog(@"%@",arr);
NSInteger maxCou = 0;
NSMutableArray *strArr = [[NSMutableArray alloc]init];
for (NSInteger j = 0; j < arr.count ; j++) {
NSInteger count = 0;
for (NSInteger i = 0; i < arr.count; i++) {
if ([arr[i] compare:arr[j]]==NSOrderedSame) {
count++;
}
if (count > maxCou) {
maxCou = count;
[strArr addObject:arr[j]];
}
}
}
NSString *ss = [NSString stringWithFormat:@"%@%lu",[strArr lastObject],maxCou];
return ss ;
}
/*
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打印
*/
- (void)printYangHuiTriangle:(int) n{
int a[100][100];
for (int i = 0 ; i < n; i++) {
for (int j = 0 ; j <= i; j++) {
if (i ==j||(j==0&&i!=j)) {
a[i][j] = 1;
}else {
a[i][j] = a[i-1][j]+a[i-1][j-1];
}
}
}
for (int i = 0 ; i < n; i++) {
for (int j = 0 ; j <= i; j++){
printf("%d\t",a[i][j]);
}
printf("\n");
}
}
/*
8 传入一段字符串,把相同的字符按出现顺序,归在一起,并压缩(20分)
比如:
输入 SamSameCome
SamSameCome
输出:
S2a2m3e2C1o1
返回值为压缩后的结果,比如S2a2m3e2C1o1
*/
- (NSString *)compressString:(NSString *)s{
NSMutableString *muStr = [[NSMutableString alloc]init];
//取出字符串的第i个元素,赋值给ch1
for (int i = 0; i < s.length; i++) {
unichar ch1 = [s characterAtIndex:i];
NSInteger count = 0;
//计算出ch1在字符串中出现的次数,用count记录
for (int j = 0; j < s.length; j++) {
unichar ch2 = [s characterAtIndex:j];
if (ch1 == ch2) {
count++;
}
}
//把字符和它出现的次数count合成一个字符串
NSString *ss = [NSString stringWithFormat:@"%C%ld",ch1,(long)count];
//如果没有存在则把字符和它的出现的次数添加到可变字符串中
if ([muStr containsString:ss] == 0) {
[muStr appendString:ss];
}
}
return muStr ;
}
/*
9 根据输入的内容用NSLog打印出菱形(10分)
*/
//count 表示正方形边长
//flagString 组成菱4形的边
//blankString 组成背景正方形
//比如 [class print:5 blankString:@“+”flagString:@“#”];
/*
+ + # + +
+ # + # +
# + + + #
+ # + # +
+ + # + +
*/
-(void)print:(NSInteger)count blankString:(NSString*)blankString flagString:(NSString*)flagString{
NSMutableString *muStr = [[NSMutableString alloc]init];
for (int i = 0; i < count; i++) {
for (int j = 0 ; j < count; j++) {
if ((i+j == (count - 1)/2)||(j-i == (count - 1)/2)||(i-j==(count - 1)/2)||(i+j==count+1)) {
[muStr appendFormat:@"%@ ",flagString];
}else{
[muStr appendFormat:@"%@ ",blankString];
}
}
[muStr appendFormat:@"%c",'\n'];
}
NSLog(@"第九题:\n%@",muStr);
}
/*
10. 求一个字符串s的最大连续递减数字子串。(20)
比如:
输入 12345986fffwf3210abcd 输出为 3210
输入 abcd765bbw135797531f12345 输出为 765
//如果有多个相同的最大数字串那么返回最后一个
*/
- (NSString *)subNumberString:(NSString *)string{
NSMutableString *muStr = [[NSMutableString alloc]initWithString:string];
NSInteger count = 0;
NSInteger index = 0;
//先判断字符串中是否是字符,如果是字符则换成空格
for (int i = 0; i < muStr.length; i++) {
if ([muStr characterAtIndex:i] > '9' || [muStr characterAtIndex:i] <'0') {
[muStr replaceCharactersInRange:NSMakeRange(i, 1) withString:@" "];
}
}
//根据空格把字符串分成数组
NSArray *arr = [muStr componentsSeparatedByString:@" "];
for (int i = 0; i < arr.count; i++) {
NSInteger flag = 1;//设置一个标记
//如果数组中的第i个元素不为空
if ([arr[i]compare:@"" ]!=NSOrderedSame) {
//数组中的元素是字符串,让字符串中的每一个元素进行比较
for (int j = 0; j < [arr[i] length]-1; j++) {
//如果是前面的一位小于等于后面的一位,则跳出循环,并且把flag标记为0
if ([arr[i] characterAtIndex:j] <= [arr[i] characterAtIndex:j+1]) {
flag = 0;
break;
}
}
}
//判断如果flag不为0和比较已存在的值的大小满足条件则返回下标
if (flag == 1 && [arr[i] integerValue] >= count) {
count = [arr[i] integerValue];
index = i;
}
}
return arr[index];
}
0 0
- 与oc字符串有关的习题以及答案
- OC 习题2的答案
- oc学习 习题更多的答案
- oc 学习习题答案
- OC习题和答案
- OC习题和答案2
- OC习题和答案3
- oc---------有关字符串的创建方式
- 操作系统习题与答案
- OC 数组以及字符串拼接与分割
- 习题9.18的答案
- 习题9.18的答案
- SQL语法习题与答案
- .NET学习 流程控制习题以及答案
- mysql习题附带答案以及代码
- 有关||和&&以及|与||、&与&&的区别
- 有关稀疏矩阵的习题
- pl/sql 与字符串有关的函数~
- (2.1)英语听力之短对话
- spring data jpa中@Query中的模糊查询<like关键字>
- Python3 Counter类计算list中元素出现次数
- 导入项目后,make project时出错
- 14.1 Understanding Index Performance 了解索引性能
- 与oc字符串有关的习题以及答案
- SSH框架的No result defined for action 错误
- iOS开发 - 微信扫描二维码登录网页的原理
- 8.7学习日记
- 9.7数学与概率(三)——在二维平面上,有两个正方形,请找出一条直线,能够将这两个正方形对半分
- python udp 广播
- 对于生产者消费者模型的理解
- Android 5.0 呼叫流程--呼出
- 运算符重载