指针实训,第2关:字符串比较

第2关:字符串比较

100

  • 任务要求
  • 参考答案
  • 评论36

任务描述

写一个函数,实现两个字符串的比较。即自己写一个stringCompared函数,函数原型为:int stringCompared(char * p1,char * p2);,设p1指向字符串s1,p2指向字符串s2。要求当s1==s2时,返回值为0,当s1!=s2时,返回他们两者第一个不同的字符的ASCII码差值,如果s1>s2,则输出一个正值,如果s1<s2,则输出一个负值。

本关知识
数组元素的指针

一个指针变量既可以指向变量,也可以指向数组元素(即把某一个元素的地址放到一个指针变量中)。 例如:

 
  1. int a[5] = {1,3,5,7,9};
  2. int *p;
  3. p = &a[0];

以上是使指针变量p指向a数组的第0个元素。

在引用数组元素时指针的运算

当指针指向数组元素时,可以对指针进行加和减运算。 如上例子p指向数组元素a[0],p+1则表示指向下一个数组元素a[1]。 在指针指向数组元素时,可以对指针进行以下运算: 加一个整数,如p+1 减一个整数,如p-1 自加运算,p++++p 自减运算,p--,--p 两个指针相减,如p1-p2(只有当p1p2都指向同一个数组中的元素才有意义) 说明: 如果指针变量p指向数组中的一个元素,则p+1指向同一数组中的下一个元素,p-1指向同一数组中的上一个元素。

通过指针引用数组元素

引用一个数组元素,可以有两种方法: (1)下标法,如a[i]形式; (2)指针发,如*(a+i) *(p+i),其中a是数组名,p是指向数组元素的指针变量,其初值为p=a;

字符指针作函数参数

如果想把一个字符串从一个函数“传递”到另一个函数,可以用地址传递的办法,即用字符数组名作为参数,也可以用字符指针变量作为参数,在被调用的函数中可以改变字符串的内容,在主调函数中可以引用改变后的字符串。

编程要求

本关的编程任务是补全StringCompared.h文件中stringCompared的函数,以实现字符串比较的功能。 实际的测试样例参见下文。 本关涉及的代码文件StringCompare.h的代码框架如下:

 
  1. int stringCompared(char *p1,char *p2)
  2. {
  3. //在此写入函数体
  4. //在函数体内实现字符串比较
  5. //注意主函数,主函数已经写好
  6. /*****************Begin****************/
  7. /***************** End **************/
  8. }

主函数如下:

 
  1. //包含标准输入输出函数
  2. #include <stdio.h>
  3. #include"StringCompared.h"
  4. //定义main函数
  5. int main()
  6. {
  7. int m; //m用于保存两个字符串中的第一个不同字符的ASCII码的差值
  8. //定义两个字符数组,分别用于保存输入的两个字符串
  9. char str1[20],str2[20];
  10. //定义两个指针变量,分别指向之前定义的两个字符数组
  11. char *p1,*p2;
  12. scanf("%s",str1);
  13. scanf("%s",str2);
  14. //让指针变量p1指向字符数组str1
  15. p1=str1;
  16. //让指针变量p2指向字符数组str2
  17. p2=str2;
  18. m=stringCompared(p1,p2);
  19. printf("%d",m);
  20. return 0;
  21. }

其中: #include <stdio.h>的意思是包含stdio函数库,使得当前程序可以调用标准输入输出函数库中的函数。 int main()是定义main函数,每个C程序都必须有且只有一个main函数。该函数是整个程序的入口,程序执行会从main函数的第一条语句开始。 int表示main函数的返回值类型。函数结束时需要返回一个整数。 return 0; 是函数返回,这里是从main函数返回,0是返回的整数值。return语句会结束一个函数的运行。

测试说明

本关的测试过程如下:

  1. 平台编译StringComparedMain.c以及头文件StringCompared.h,然后链接相关程序库并生成StringComparedMain.exe以及StringCompared.h.gch;
  2. 平台运行StringComparedMain.exe,并以标准方式提供测试输入;
  3. 平台获取StringComparedMain.exe的输出,然后将其与预测输出对比,如果一致则测试通过;否则测试失败。 以下是平台对StringComparedMain.c的测试样例:

测试输入: And Aid 预期输出: 5

测试输入: ABC CBA 预期输出: -2

int stringCompared(char *p1,char *p2)

{

    //在此写入函数体

    //在函数体内实现字符串比较

    //注意主函数,主函数已经写好

    /*****************Begin****************/

    int i, j;

    while (*p1 != '\0' && *p2 != '\0') {

        i = *p1 - *p2;

        if (i != 0) {

            j = i;

            break;

        }

        p1++;

        p2++;

    }

    if (*p1 == '\0' || *p2 == '\0') {

        j = *p1 - *p2;

    }

    return j;


 

    /***************** End **************/

}

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值