第2关:字符串比较
100
- 任务要求
- 参考答案
- 评论36
任务描述
写一个函数,实现两个字符串的比较。即自己写一个stringCompared
函数,函数原型为:int stringCompared(char * p1,char * p2);
,设p1
指向字符串s1,p2
指向字符串s2
。要求当s1==s2
时,返回值为0
,当s1!=s2
时,返回他们两者第一个不同的字符的ASCII
码差值,如果s1>s2
,则输出一个正值,如果s1<s2
,则输出一个负值。
本关知识
数组元素的指针
一个指针变量既可以指向变量,也可以指向数组元素(即把某一个元素的地址放到一个指针变量中)。 例如:
int a[5] = {1,3,5,7,9};
int *p;
p = &a[0];
以上是使指针变量p
指向a
数组的第0
个元素。
在引用数组元素时指针的运算
当指针指向数组元素时,可以对指针进行加和减运算。 如上例子p
指向数组元素a[0],p+1
则表示指向下一个数组元素a[1]
。 在指针指向数组元素时,可以对指针进行以下运算: 加一个整数,如p+1
减一个整数,如p-1
自加运算,p++
,++p
自减运算,p--
,--p
两个指针相减,如p1-p2
(只有当p1
和p2
都指向同一个数组中的元素才有意义) 说明: 如果指针变量p
指向数组中的一个元素,则p+1
指向同一数组中的下一个元素,p-1
指向同一数组中的上一个元素。
通过指针引用数组元素
引用一个数组元素,可以有两种方法: (1)下标法,如a[i]
形式; (2)指针发,如*(a+i)
或*(p+i)
,其中a
是数组名,p
是指向数组元素的指针变量,其初值为p=a
;
字符指针作函数参数
如果想把一个字符串从一个函数“传递”到另一个函数,可以用地址传递的办法,即用字符数组名作为参数,也可以用字符指针变量作为参数,在被调用的函数中可以改变字符串的内容,在主调函数中可以引用改变后的字符串。
编程要求
本关的编程任务是补全StringCompared.h
文件中stringCompared
的函数,以实现字符串比较的功能。 实际的测试样例参见下文。 本关涉及的代码文件StringCompare.h
的代码框架如下:
int stringCompared(char *p1,char *p2)
{
//在此写入函数体
//在函数体内实现字符串比较
//注意主函数,主函数已经写好
/*****************Begin****************/
/***************** End **************/
}
主函数如下:
//包含标准输入输出函数
#include <stdio.h>
#include"StringCompared.h"
//定义main函数
int main()
{
int m; //m用于保存两个字符串中的第一个不同字符的ASCII码的差值
//定义两个字符数组,分别用于保存输入的两个字符串
char str1[20],str2[20];
//定义两个指针变量,分别指向之前定义的两个字符数组
char *p1,*p2;
scanf("%s",str1);
scanf("%s",str2);
//让指针变量p1指向字符数组str1
p1=str1;
//让指针变量p2指向字符数组str2
p2=str2;
m=stringCompared(p1,p2);
printf("%d",m);
return 0;
}
其中: #include <stdio.h>
的意思是包含stdio
函数库,使得当前程序可以调用标准输入输出函数库中的函数。 int main()
是定义main
函数,每个C
程序都必须有且只有一个main
函数。该函数是整个程序的入口,程序执行会从main
函数的第一条语句开始。 int
表示main
函数的返回值类型。函数结束时需要返回一个整数。 return 0;
是函数返回,这里是从main
函数返回,0
是返回的整数值。return
语句会结束一个函数的运行。
测试说明
本关的测试过程如下:
- 平台编译
StringComparedMain.c
以及头文件StringCompared.h
,然后链接相关程序库并生成StringComparedMain.exe
以及StringCompared.h.gch
; - 平台运行
StringComparedMain.exe
,并以标准方式提供测试输入; - 平台获取
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 **************/
}