------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
看到论坛上已经通过面试的同学分享了两道编程题,以下是我的解题思路,记录下来留作复习用。
1、已有一个数组:@[@"1",@"2",@"3",@"6",@"8",@"9",nil] ,已经按照从小到大的顺序排列好。让用户输入一个新的整数,将这个整数放进数组里,并保持从小到大的顺序排列。
#import <Foundation/Foundation.h>
int main()
{
// 创建已知的数组,定义为可变长度类型
NSMutableArray *a1 = [NSMutableArray arrayWithObjects:@"1",@"2",@"3",@"6",@"8",@"9", nil];
// 设置一个用来接受用户所输入整数的整形变量
int num1;
// 接受用户所输入的整数
printf(@"请输入一个整数:\n");
scanf("%d", &num1);
// 计算a1数组当前的长度,用count变量记录下来
int count = (int)a1.count;
// 将用户输入的整形数字转换成字符串,以便于存入a1数组
NSString *numstr = [NSString stringWithFormat:@"%d",num1];
// 将用户输入的数字(现为字符串类型)追加到a1数组末尾
[a1 addObject:numstr];
// 从右到左对数组内的字符串值进行扫描,长度为原有长度加1
for(int i = count; i > 0; i--)
{
// 如果当前位置的数字小于左侧数字的值,则交换二者的位置
if([a1[i] intValue] < [a1[i - 1] intValue])
{
NSString *temp = a1[i];
a1[i] = a1[i - 1];
a1[i - 1] = temp;
}
// 否则说明已经完成了应做的工作,跳出循环体结束工作
else
{
break;
}
}
// 输出插入用户输入的数字后的数组
NSLog(@"%@",a1);
return 0;
}
2、 现有如下定义的字符串: NSString * str=@“itheimaAndroid”,能对该字符串进行修改请输出删除Android后的新字符串。
#import <Foundation/Foundation.h>
int main()
{
// 创建已知字符串
NSString *str=@"itheimaAndroid";
NSMutableString *str1;
str1 = [[NSMutableString alloc]initWithFormat:@"%@",str];
// 此处之前做错了,忘记了range是结构体,加了*,还好后来想起来了
NSRange range = [str1 rangeOfString:@"Android"];
// 按照之前得到的range,删除字符串Android
[str1 deleteCharactersInRange:range];
NSLog(@"%@",str1);
return 0;
}
3、手动实现capitalizedString的功能,对一段文字的每个单词的首字母转换成大写。
#import <Foundation/Foundation.h>
int main()
{
// 创建已知字符串
NSMutableString *str = [[NSMutableString alloc]initWithFormat:@"hahahaha wowowowo Hehe heihei enen."];
// 单独取出字符串的第一个字符
char firstchar = [str characterAtIndex:0];
// 判断第一个字符是否是小写字母
if ((firstchar >= 'a') && (firstchar <= 'z'))
{
// 如果是小写字母,则转换成大写
firstchar = firstchar + ('A' - 'a');
}
// 将第一个字母转换后的字符转换为字符串
NSString *firstcharstr = [[NSString alloc]initWithFormat:@"%c",firstchar];
// 用转换后的第一个字母的字符串替换掉原来字符串的第一个字母
[str replaceCharactersInRange:NSMakeRange(0, 1) withString:firstcharstr];
// 遍历整个字符串
for (int i=0; i < str.length; i++)
{
// 如果遇到空格(此时的i值,即为下一个单词的第一个字母的前一个字符)
if ([str characterAtIndex:i] == ' ')
{
// 判断空格后面的字符是不是小写字母
if (([str characterAtIndex:(i + 1)] >= 'a') && ([str characterAtIndex:(i + 1)] <= 'z'))
{
// 如果是小写字母就转换成大写字母
char temp1 = [str characterAtIndex:(i + 1)] + ('A' - 'a');
// 将转换后的字母转换成字符串
NSString *temp2 = [[NSString alloc]initWithFormat:@"%c",temp1];
// 用转换后的字符替换原来的空格后面的字符
[str replaceCharactersInRange:NSMakeRange((i + 1), 1) withString:temp2];
}
};
}
// 输出检验
NSLog(@"%@",str);
return 0;
}
4. 把一个英文句子反向输出,如‘abc’- 'cba'
#import <Foundation/Foundation.h>
int main()
{
// 设置已知字符串
NSMutableString *str = [[NSMutableString alloc] initWithString:@"abcdefghij123456789"];
// 求字符串总长度
int changDu = (int)str.length;
// 将字符串最右端字符的下标储存在i中,遍历,直到字符串中间位置结束
for (int i = (changDu - 1); i >= (changDu / 2); i--)
{
// 在遍历的同时储存要交换的两个字符的值
char right = [str characterAtIndex:i];
char left = [str characterAtIndex:(changDu - i - 1)];
// 交换两个字符的值,同时将两个字符转换成字符串,方便后面的替换字符串操作
NSString *rightNow = [[NSString alloc] initWithFormat:@"%c",left];
NSString *leftNow = [[NSString alloc]initWithFormat:@"%c",right];
// 将交换好的字符的字符串替换进原来的字符串中
[str replaceCharactersInRange:NSMakeRange(i, 1) withString:rightNow];
[str replaceCharactersInRange:NSMakeRange(changDu - i - 1, 1) withString:leftNow];
}
// 检查输出结果
NSLog(@"%@",str);
return 0;
}