关闭

oc基础之关于字符串和数组的补充(七)

标签: 黑马程序员字符串数组
521人阅读 评论(0) 收藏 举报
分类:

        在前面10篇博文中,我以例题的形式将C语言、OC基础和Foundation的相关基础知识进行全面阐述。在这篇补充的博文中,我将挑出10个关于字符串和数组的习题进行总结,不仅每个句子进行了详细注释,还把我在编写的过程中易犯错误的注意点和一些疑问也展现出来了,希望跟大家进行更深的交流。

1、编程实现对键盘输入的英文名句子进行加密。用加密方法为:当内容为英文字母时,用26字母中的其后三个字母代替该字母,若为其它字符时不变。比如245a95n加密后是245bcd95opq。(C语言)

#include <stdio.h>

#include <string.h>

char str[100];//接收键盘输入字符串

//主函数

int main(int argc,constchar * argv[]){

    //从键盘上输入一个英文句子

    printf("请输入一个字符串:\n");

    gets(str);

    for (int i =0; i<strlen(str); i++)

    {

        //判断是否为字母

        if (((str[i]>='a')&&(str[i]<='z'))||

            ((str[i]>='A')&&(str[i]<='Z')))

        {

           //若为字母,输出字母的后三个字母

            printf("%c",str[i]+1);

            printf("%c",str[i]+2);

            printf("%c",str[i]+3);

        }

        //若不是字母,则不变

        else

        printf("%c",str[i]);

    }

    printf("\n");

}

/**

 注意点:

  1、字符串指针不能直接接受键盘上输入,如不可以将"str[100]"改为"*str"

 2c语言中,字符可以与数字进行运算,当输出格式为“%c”时,输出字母;当输出格式为“%d”时,输出字母的ascii

 3、字符之间可以进行各种运算(算术运算、逻辑运算、关系运算)

 */

/**

 缺陷---->当字母为x(X),y(Y),z(Z)时,输出的字母将会有非字母出现

 */

2、从键盘输入一大堆字符串,统计A、B、C、D的出现次数,最后出现次数由高到低输出字母和出现次数。(C语言)

#include <stdio.h>

#include "string.h"

#define N 100

char str[N];//存放键盘上输入的字符串

int count[4] = {0};//存放ABCD的出现次数

char str1[4] = {'A','B','C','D'};

char n;

int temp1,temp2;//临时变量

//主函数

int main(int argc,constchar * argv[]){

    //从键盘上输入字符串

    printf("请输入一个字符串:\n");

    gets(str);

   //统计ABCD的出现次数

    for (int i =0; i<strlen(str); i++)

    {

        n = str[i];

   //判断字符是否为ABCD,并统计次数

        switch (n)

        {

            case 'A':

                count[0]++;

                break;

            case 'B':

                count[1]++;

                break;

            case 'C':

                count[2]++;

                break;

            case 'D':

                count[3]++;

                break;

            default:

                break;

        }

    }

    //选择排序法排序出现次数由高到低输出字母和出现次数

    for (int i =0; i<3; i++)

    {

        for (int j = i+1; j<4; j++)

            {

               //若次数数组中的第i个数小于后面的数,则交换位置

                if(count[i]<count[j])

                {

                    //交换次数的位置

                    temp1 = count[i];

                    count[i] = count[j];

                    count[j] = temp1;

                    //交换字母位置

                    temp2 = str1[i];

                    str1[i] = str1[j];

                    str1[j] = temp2;

                }

        }

    }

    //输出出现次数由高到低输出字母和出现次数

    for (int i =0; i<4; i++)

    {

        printf("字母%c出现的次数:%d\n",str1[i],count[i]);

    }

}

3、求字符串“158”和“39”按十进制数值做差后的结果以字符串形式输出 Objective-C 

#import <Foundation/Foundation.h>

int result;

//主函数

int main(int argc,constchar * argv[]){

    @autoreleasepool{

        //创建2个字符串

        NSString *str1 = @"158";

        NSString *str2 = @"39";

        //将字符串转换成整数进行运算

        result = [str1 intValue]-[str2 intValue];

        //将做差后的整数转换成字符串输出

        NSLog(@"158-39 = %@",[NSNumbernumberWithInt:result]);

        NSLog(@"158-39 = %@",[NSStringstringWithFormat:@"%d",result]);

    }

    return 0;

}

/**

 注意点:

 1“intValue”是对象方法,"stringWithFormat:"“numberWithInt:”是类方法

 2、谁在前面就转换成谁,如“intValue”转换成整数,“numberWithInt:”转换成NSNumber对象

 3、整数转换成字符串形式的方法:(1)利用“numberWithInt:整数

                           2)利用格式化--->“stringWithFormat:@"%d",整数

 */

4、手动实现capitalizedString的功能,对一段文字的每个单词的首字母转换成大写。Objective-C

#import <Foundation/Foundation.h>

//主函数

int main(int argc,constchar * argv[]){

    @autoreleasepool{

      //创建一个可变字符串

    NSMutableString *str = [NSMutableStringstringWithFormat:@"we are the Best"];

      //输出字符串

    NSLog(@"%@",str);        

        //判断首单词的首字母是否大写

    if (([strcharacterAtIndex:0]>='a')&&([strcharacterAtIndex:0]<='z'))

       {

            //将小写替换成大写

            char n = [str characterAtIndex:0]-32;

            [str replaceCharactersInRange:NSMakeRange(0,1)withString:[NSStringstringWithFormat:@"%c",n]];   

        }

        for (int i =1; i<str.length; i++)

        {

           //判断非首单词的字符是否是单词首字母

            if ([str characterAtIndex:i]==' ')

            {

                //判断非首单词的单词首字母是否大写

                if (([str characterAtIndex:i+1]>='a')&&([strcharacterAtIndex:i+1]<='z'))

                {

                    //将小写替换成大写

                    char n1 = [str characterAtIndex:i+1]-32;

                    [str replaceCharactersInRange:NSMakeRange(i+1,1)withString:[NSStringstringWithFormat:@"%c",n1]];

                }

            }

        }

        //输出修改后的字符串

          NSLog(@"%@",str);

    }

    return 0;

}

/**

 注意点及疑问;

 1、字符串NSString/NSMutableString的某个元素用“characterAtIndex:”--->对象方法

 2、字符串NSString/NSMutableString中的元素能进行运算么?

 3、为什么字符串比较中,不能用“==”,而使用“compare”

 4、注意字符串“”和字符‘’的区分,总是写错

 */

5、把一个英文句子反向输出,如‘abc’- 'cba'(Objective-C)

#import <Foundation/Foundation.h>

char string[100];

//主函数

int main(int argc,constchar * argv[]){

    @autoreleasepool{

      //从键盘上接收一个英文句子

        NSLog(@"从键盘上输入一个英文句子:");

        gets(string);

        NSString *str = [NSStringstringWithFormat:@"%s",string];        

        //创建一个可变的空字符串

        NSMutableString *str1 = [NSMutableStringstring];

        //反向输出英文句子

        for (int i = (int)str.length-1; i>=0; i--)

        {

            //str的字符反向存放在str1

            [str1 appendString:[NSStringstringWithFormat:@"%c",[strcharacterAtIndex:i]]];

        }

        NSLog(@"反向输出的句子为:%@",str1);

    }

    return 0;

}

/**

 注意点:

 1、字符串指针不能从键盘上接受字符,只能使用字符数组

 2str.length是什么类型?如何解决类型不一致的问题?

 3、如何将字符连接到字符串中?

 3、另一种方法:通过交换位置怎么做?

 */

6、有两个字符串str和str2,求出两个字符串中最长公共子串及长度。(Objective-C)

 #import<Foundation/Foundation.h>

//定义全局变量

NSString *minStr;//长度较小字符串

NSString *maxStr;//长度较大字符串

NSString *bothStr;//公共字符串

NSInteger max = 0;//最大长度

//主函数

int main(int argc,constchar * argv[]){

    @autoreleasepool{

        //创建2个字符串

        NSString *str1 = @"iloveyou";

        NSString *str2 = @"love";

        //创建一个可变数组,存放2个字符串的公共字符串

        NSMutableArray *arr = [NSMutableArrayarray];

        //比较2个字符串的大小

        if (str1.length<str2.length){

            minStr = str1;

            maxStr = str2;

        }

        else{

            minStr = str2;

            maxStr = str1;

        }

        //逐个取出长度较小的字符串的子字符串,并判断长字符串是否有相同的子字符串

        for (int i =0; i<minStr.length; i++)

        {

            for (int j =0; j<minStr.length-i; j++)

            {

                //逐个取出长度较小的字符串的子字符串

                bothStr = [minStrsubstringWithRange:NSMakeRange(i, j+1)];

                //判断长字符串是否有相同的子字符串

                NSRange range = [maxStrrangeOfString:bothStr];

                if (range.location!=NSNotFound)

                {

                    //将公共字符串存放在可变数组中

                    [arr addObject:bothStr];

                    max = (max>bothStr.length)?max:bothStr.length;

                }

            }

        }

        //求出最长的公共字符串

        for (int i =0; i<arr.count; i++)

        {

            if ([arr[i] length]==max)

                NSLog(@"最大长度:%ld,公共字符串为:%@",max,arr[i]);

        }

    }

    return 0;

}

7、编写一个程序,用于接受从终端输入的整数,提取并用英文显示这个数的每一位数。例如输入112 输出 One One Two(Objective-C)

#import <Foundation/Foundation.h>

char str[100];

//主函数

int main(int argc, const char * argv[]){

    @autoreleasepool{

        //创建一个不可变的数组存放0~9的英文

        NSArray *array1 = @[@"zero",@"one",@"two",@"three",@"four",@"five",@"six",@"seven",@"eight",@"nine",];        //创建一个可变的空数组

        NSMutableArray *array2 = [NSMutableArray array];

        //从终端输入一个整数

        NSLog(@"请输入一个整数(如112):");

        gets(str);

        //将整数翻译成对应的英文赋值给可变数组

        for (int i = 0; i<strlen(str); i++)

        {

            [array2 addObject:array1[str[i]-48]];

        }

        //将可变数组转化成字符串输出

        NSLog(@"%@",[array2 componentsJoinedByString:@" "]);

    }

    return 0;

}

/**

注意点

数字的ascii码比数字的值大48

*/

8、现在有一个有序的数组,要求用户输入一个整数放到数组中还保证这个数组是有序的。例如原数组为@[@1,@3,@5,@7,@9]; 插入8之后为@[@1,@3,@5,@7,@8,@9];(Objective-C)

#import <Foundation/Foundation.h>

int input1;//定义存放从键盘上输入的整数的变量

//主函数

int main(int argc,constchar * argv[]){

    @autoreleasepool{

        //创建一个有序数组

        NSArray *arr = @[@1,@3,@5,@7,@9];

        //创建一个不可变的有序数组

        NSMutableArray *array1 = [NSMutableArrayarray];

        //将数组arr赋值给array

        array1 = arr.mutableCopy;

        //输出原数组

        NSLog(@"方法1:原有序数组 %@",array1);

        //从键盘上输入一个整数

        NSLog(@"方法1:请输入一个整数(如:8");

        scanf("%d",&input1);

        //将整数包装成对象

        NSNumber *input = [NSNumbernumberWithInt:input1];

        for (int i =0; i<array1.count; i++)

        {

            // 比较输入的数与数组第i个元素的大小

            if ([array1[i] compare:input]>=0)

            {

                //将整数插入有序数组

                [array1 insertObject:input atIndex:i];

                break;  

            }

           //若输入的数是数组中最大的,直接添加到数组的最后一位

            if ([array1[array1.count-1]compare:input]<0)

            {

                [array1 addObject:input];

                break;

            }

        }

        //输出插入整数后的数组

        NSLog(@"插入整数后的有序数组 %@",array1);

    }

    return 0;

}

9、定义⼀一个block,要求接收⼀一个数组并⽤用迭代器遍历数组,接收的数组内容如下:
“itheima”
10
19.8
nil
struct Date{int year,int month,intday}; (Objective-C)

#import <Foundation/Foundation.h>

//定义结构体

typedef struct{

    int year;

    int month;

    int day;

}Date;

//主函数

int main(int argc,constchar * argv[])

{

    @autoreleasepool

    {

        Date date = {2015,11,11};

        //将结构体转换为NSvalue类型

        NSValue *date1 = [NSValuevalueWithBytes:&dateobjCType:@encode(Date)];        

        //定义一个数组

        NSArray *array = [NSArrayarrayWithObjects:@"itheima",@10,@19.8,[NSNullnull],date1,nil];

        //定义block遍历数组

        void(^arrayBlock)(NSArray*) = ^(NSArray*array1){

            //利用block遍历数组

          [array1 enumerateObjectsUsingBlock:^(id array1 ,NSUInteger idx,BOOL *stop){

                //将是非结构体的数组元素输出

                if (idx<4){

                    NSLog(@"%@",array1);

                }

                //将是结构体的数组元素输出

                else{

                    Date d;

                    [date1 getValue:&d];

                    NSLog(@"%d-%d-%d",d.year,d.month,d.day);

                }

            }];

        };

        arrayBlock(array);

    }

    return 0;

}

10、设计一个函数,找出整型数组元素的最小值(C语言编程题)

#include <stdio.h>

//找出整型数组元素的最小值的函数

int minx(int *p,int x)

{

    //将数组的第一个元素赋给min

    int min = *p;

    for (int i =0; i<x-1; i++)

    {

        //将指针指向下一个元素

        p++;

        //取2个数组元素的较小值赋给min

        min = (min<*p)?min:*p;

    }

    return min;

}

//主函数

int main(int argc,constchar * argv[])

{

    //创建一个整形数组

    int ch[] = {0,3,5,9,1,2,4,-1};

    //调用函数

    printf("最小值min = %d\n",minx(ch,8));

}

/**

 注意点:

 1、数组名作为参数进行地址传递时,同时传递数组名和数组长度

 2、地址传递时,若含有循环,注意for循环和while循环的比较,i++p++的区分

 */ 

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3543次
    • 积分:155
    • 等级:
    • 排名:千里之外
    • 原创:11篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档