黑马程序员技术交流社区

标题: 求一道提的简单做法 [打印本页]

作者: kakam    时间: 2016-8-11 00:43
标题: 求一道提的简单做法
过滤输入的字符串,只保留这个字符串的小写字母
过滤后求每个小写字母出现的次数


作者: anan安    时间: 2016-8-11 00:43





#import <Foundation/Foundation.h>

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

//    思路
    /*   
     
     定义一个数组接受这个字符串 长度为100
     
     提示用户输入
     
     fegets接受数组
     
     在控制台上输入一个字符串,过滤这个字符串,只保留这个字符串中的小写字母.
     
     
     对于上面过滤之后的字符串,统计每个字母的个数,打印出每个字母对应的个数
     */
   
   
    //定义一个数组接受这个字符串 长度为100
    char arr[100] =  {};
   
    //提示用户输入
    NSLog(@"请输入椅子字符串:");
   
    //fegets接受数组
    rewind(stdin);
   
    fgets(arr, 100, stdin);
   
    //求数组中字符的个数
    size_t len = strlen(arr);
   
    //在控制台上输入一个字符串,过滤这个字符串,只保留这个字符串中的小写字母.
    for (int i = 0 ,j =0 ;  i < len; i++) {
     
        if (arr[i] >= 'a'&&arr[i]<= 'z') {
        
            arr[j] = arr[i];
            
            j++;
        }
        else{
            arr[i] = '\0';}
    }
   
   
    //求出筛选过后的只有小写字母字符的长度
    size_t len1 = strlen(arr);
   
    //打印出筛选过后的数组
    for (int i = 0 ; i < len1 ; i++) {
        printf("%c",arr[i]);
    }
   
    NSLog(@"\n");
   
    //统计每个字母的个数,打印出每个字母对应的个数
  
    for (int i = 'a'; i <= 'z'; i++) {
        int count = 0;
        for (int j = 0; j<len1 ; j++) {
            if (i == arr[j]) {
                count ++;
            }
        }
        if (count != 0) {
            printf("%c-%d\t",i,count);
        }
    }
   
作者: anan安    时间: 2016-8-11 00:44
#import <Foundation/Foundation.h>


    1.autorelease
    // 假设有个Person类,请问p1、p2、p3、p4指向的对象分别在第几行代码后会销毁
    int main()
    {
        Person *p1 = nil;
        
        @autoreleasepool
        {
            p1 = [[Person alloc] init];
        }
        
        @autoreleasepool
        {
            [p1 autorelease];
            
            Person *p2 = [[[Person alloc] init] autorelease];
            
            Person *p3 = [[Person alloc] init];
            
            @autoreleasepool
            {
                @autoreleasepool
                {
                    
                    [p3 autorelease];
                    
                    Person *p4 = [[Person alloc] init];
                    
                }// P3被销毁
               
                [p4 autorelease];
            }//p4被销毁
        }//p1 p2被销毁
        
        
        return 0;
    }
   
    2.set方法内存管理
    @class Dog;
    @interface Person : NSObject
    @property (nonatomic, retain) Dog *dog;
    @end
    @implementation Person
    - (void)dealloc
    {
        self.dog = nil;
        [super dealloc];
    }
    @end
    // 请问main函数中有无代码出现内存泄露
    int main()
    {
        @autoreleasepool
        {
            Person *p = [[[Person alloc] init] autorelease];
            p.dog = [[Dog alloc] init];
            
            
            [[[Person alloc] init] autorelease].dog = [[[Dog alloc] init] autorelease];
        }// 有 当[[[Person alloc] init] autorelease]被销毁以后重写的dealloc方法并没有将dog属性release一次
        return 0;
    }
   
    3.set方法内存管理
    @class Dog;
    @interface Person : NSObject
    @property (nonatomic, retain) Dog *dog;
    @end
    @implementation Person
    - (void)dealloc
    {
        self.dog = nil;
        [super dealloc];
    }
    @end
    // 请问d1、d2、d3、p1、p2指向的对象分别在第几行代码后被销毁
    int main()
    {
        @autoreleasepool
        {
            Dog *d1 = [[Dog alloc] init];
            Dog *d2 = [[Dog alloc] init];
            Dog *d3 = [[[Dog alloc] init] autorelease];
            
            Person *p2 = [[Person alloc] init];
            p2.dog = d2;
            [d2 release];                                             //D2被释放
            
            @autoreleasepool
            {
                Person *p1 = [[[Person alloc] init] autorelease];
               
                p1.dog = d1;
                [d1 release];                                        //D1被释放了
            }
            
            p2.dog = d3;
            
            [p2 release];
        }                                                            // D3被释放
        return 0;
    }

作者: anan安    时间: 2016-8-11 00:47





#import <Foundation/Foundation.h>

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

//    思路
    /*   
     
     定义一个数组接受这个字符串 长度为100
     
     提示用户输入
     
     fegets接受数组
     
     在控制台上输入一个字符串,过滤这个字符串,只保留这个字符串中的小写字母.
     
     
     对于上面过滤之后的字符串,统计每个字母的个数,打印出每个字母对应的个数
     */
   
   
    //定义一个数组接受这个字符串 长度为100
    char arr[100] =  {};
   
    //提示用户输入
    NSLog(@"请输入椅子字符串:");
   
    //fegets接受数组
    rewind(stdin);
   
    fgets(arr, 100, stdin);
   
    //求数组中字符的个数
    size_t len = strlen(arr);
   
    //在控制台上输入一个字符串,过滤这个字符串,只保留这个字符串中的小写字母.
    for (int i = 0 ,j =0 ;  i < len; i++) {
     
        if (arr[i] >= 'a'&&arr[i]<= 'z') {
        
            arr[j] = arr[i];
            
            j++;
        }
        else{
            arr[i] = '\0';}
    }
   
   
    //求出筛选过后的只有小写字母字符的长度
    size_t len1 = strlen(arr);
   
    //打印出筛选过后的数组
    for (int i = 0 ; i < len1 ; i++) {
        printf("%c",arr[i]);
    }
   
    NSLog(@"\n");
   
    //统计每个字母的个数,打印出每个字母对应的个数
  
    for (int i = 'a'; i <= 'z'; i++) {
        int count = 0;
        for (int j = 0; j<len1 ; j++) {
            if (i == arr[j]) {
                count ++;
            }
        }
        if (count != 0) {
            printf("%c-%d\t",i,count);
        }
    }
   
作者: yuxing    时间: 2016-8-11 09:56
我就写个思路,懒得写了,直接拿正则做  
String s = new Scanner(System.in).nextLine();
s = s.replaceAll("[^a-z]","");
获取出现次数就不用我教了吧? 用HashMap

作者: yuxing    时间: 2016-8-11 10:00
奥,没注意. 是IOS的~~
作者: Liangfwu    时间: 2016-8-11 12:57
  不知道你们的和我们学的Javaee是不是相同的,如果昌的话就定义这个字符串String str="....",---〉把字符串转成字符数组char[] arr=str.toCharArray(),然后一一遍历数组元素并有循环语句中加入判断,判断是不是在字符的范围内,是的话就用计数器进行加一次





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2