纵有疾风起
人生不言弃

你必须知道的指针基础-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\n",b,s,g);    }    return 0;            }

  运行结果如下图所示:

你必须知道的指针基础-5.指针的几个小应用案例插图

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

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

// fun2:自己模拟实现strlen函数int myStrlen(char* str){    int len = 0;    while(*str != '\0')    {        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\n",len);    return 0;}

  运行结果如下图所示:

你必须知道的指针基础-5.指针的几个小应用案例插图1

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

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

// fun3:判断字符串A是否以字符串B结尾int endsWith(char* str,char* substr){    int strlen = 0;    while(*str != '\0')    {        str++;        strlen++;    }    int sublen = 0;    while(*substr != '\0')    {        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\n", endsWith(str,sub));    char sub2[] = "zhou";    printf("%d\n", endsWith(str,sub2));        return 0;}

  运行结果如下图所示:

你必须知道的指针基础-5.指针的几个小应用案例插图2

参考资料

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

 

文章转载于:https://www.cnblogs.com/edisonchou/p/4658893.html

原著是一个有趣的人,若有侵权,请通知删除

未经允许不得转载:起风网 » 你必须知道的指针基础-5.指针的几个小应用案例
分享到: 生成海报

评论 抢沙发

评论前必须登录!

立即登录