zoukankan      html  css  js  c++  java
  • 你必须知道的指针基础-5.指针的几个小应用案例

    一、使用指针传出分解后的数字

      实现一个方法“多个返回值”的效果:返回一个三位数数字的个位、十位、百位。这里,我们借助指针来”返回“分解后的结果。这种应用也是最常见的指针应用。

    // fun1:分解一个三位数,传递个位、十位和百位数字
    int parseNumber(int num,int* g,int* s,int* b)
    {
        if(num < 100 || num > 999)
        {
            // 只允许100~999的数字
            return -1;
        }
    
        *g = num % 10;
        *s = (num / 10)%10;
        *b = (num/100)%10;
    
        return 1;
    }

      测试数字为365,调用parseNumber函数,将要返回的值的地址作为参数传递:

    int main(int argc, char *argv[])
    {
        int num = 365;
        int g,s,b;
        if(parseNumber(num,&g,&s,&b))
        {
            printf("%d %d %d
    ",b,s,g);
        }
        return 0;            
    }

      运行结果如下图所示:

    二、自己动手实现strlen()函数

      我们知道strlen是计算字符串的长度,其内部是通过判断是否以''作为结束符,虽然其不是一个安全的方式,但是却是各大C教材中最常见的函数。这里,我们来自己实现一个strlen函数,利用指针的移动来辅助计算长度,这也是指针的一个最常见的应用。

    // fun2:自己模拟实现strlen函数
    int myStrlen(char* str)
    {
        int len = 0;
        while(*str != '')
        {
            str++;
            len++;
        }
    
        return len;
    }

      测试字符串为”hello“,长度为5,Main函数声明如下:

    int main(int argc, char *argv[])
    {
        char test[] = "hello";
        int len = myStrlen(test);
        printf("The length of 'hello' is %d
    ",len);
        return 0;
    }

      运行结果如下图所示:

    三、判断字符串A是否以字符串B结尾

      判断一个字符串是否以另一个子子字符串结尾,这个方法在Java中属于String类,叫做endsWith。在C#中,也位于String类,叫做EndsWith,并提供了三个重载。这里,我们借助指针来辅助实现这个经典的endsWith方法。

    // fun3:判断字符串A是否以字符串B结尾
    int endsWith(char* str,char* substr)
    {
        int strlen = 0;
        while(*str != '')
        {
            str++;
            strlen++;
        }
    
        int sublen = 0;
        while(*substr != '')
        {
            substr++;
            sublen++;
        }
    
        if(strlen < sublen)
        {
            // 如果子串长度比主串还长
            return -1;
        }
    
        int i;
        for(i=0;i<=sublen;i++)
        {
            // 从末尾开始对比每一个字符
            char strCh = *str;
            char subCh = *substr;
            if(strCh != subCh)
            {
                return 0;
            }
            else
            {
                str--;
                substr--;
            }
        }
    
        return 1;
    }

      该方法主要经历两个步骤,一是分别计算主串和子串的长度,如果子串长度超过主串长度,那么直接返回0,代表主串不以子串结尾;二是分别从末尾对主串和子串的每一个字符进行比对,直到循环结束(判断条件是子串的长度),如果其中有一个不同,那么直接返回0。

      下面对这个endsWith函数进行一个简单的测试,分别给出一个合适的用例和不合适的用例:、

    int main(int argc, char *argv[])
    {
        char str[] = "edisonchou";
        char sub[] = "chou";
        printf("%d
    ", endsWith(str,sub));
        char sub2[] = "zhou";
        printf("%d
    ", endsWith(str,sub2));
        
        return 0;
    }

      运行结果如下图所示:

    参考资料

      如鹏网,《C语言也能干大事(第三版)》

  • 相关阅读:
    google git的使用方法
    C/C++ 开发库 | C/C++ Development Library
    log4cplus c++开源日志系统
    c++配置类
    Markdown基础语法
    Nhibernate 映射关系,一对多 多对一与多对手在映射文件中的体现。
    Nhibernate refers to an unmapped class nhibernate问题的解决(初学者)
    UICollectionView的使用
    Runloop
    UITableView(转)
  • 原文地址:https://www.cnblogs.com/edisonchou/p/4658893.html
Copyright © 2011-2022 走看看