编写一函数,实现两个字符串的比较。即自己写一个strcmp函数,函数原型为strcmp(char *p1,char *p2),设p1指向字符串s1,p2指向字符串s2。要求当s1=s2时,返回值为0;(s1,s2长度相等并且不超过100) 若s1!=s2,返回它们两者第一个不同字符的ascii码差值(如“boy”与“bad”,第2个字母不同,“o”与“a”之差为79-65=14);如果s1>s2,则输出正值,反之输出负值。(本题要求用指针来做)
时间: 2023-05-31 08:18:13 浏览: 230
### 回答1:
这道题要求编写一个函数,实现比较两个字符串。具体要求如下:
- 自己写一个strcmp函数,函数原型为strcmp(char *p1, char *p2),其中p1指向字符串s1,p2指向字符串s2。
- 要求当s1=s2时,返回值为0;(s1,s2长度相等且不超过100)
- 若s1!=s2,则返回它们第一个不同字符的ascii码差值(如“boy”和“bad”,第2个字母不同,“o”和“a”之间相差14)。
- 如果s1>s2,则输出正值,否则输出负值。
这道题我们需要用指针来表示字符串,然后进行逐个字符的比较,最后返回结果。代码实现和C语言的标准库函数strcmp类似,但是需要我们自己来实现。
### 回答2:
strcmp函数的作用是比较两个字符串是否相等,如果相等返回0,不相等返回它们两者第一个不同字符的ascii码差值。下面是本人编写的strcmp函数实现方案:
```c
int strcmp(char *p1, char *p2){
int i;
for(i=0; p1[i]==p2[i] && p1[i]!='\0'; i++);
if(p1[i]==p2[i]){
return 0;//两个字符串相等
}
else{
return p1[i]-p2[i];//返回它们两者第一个不同字符的ascii码差值
}
}
```
strcmp函数的实现思路:定义一个循环变量i,通过循环比较两个字符串p1和p2的每个字符是否相等,如果相等则继续比较下一个字符,直到遇到第一个不相等的字符或者字符结尾'\0'。如果两个字符串相等,则返回0,否则返回它们两者第一个不同字符的ascii码差值。
下面是对函数的测试:
```c
#include<stdio.h>
int strcmp(char *p1, char *p2);
int main(){
char s1[101], s2[101];//定义两个字符串
printf("请输入两个字符串s1和s2:\n");
gets(s1);//输入字符串s1
gets(s2);//输入字符串s2
int result=strcmp(s1,s2);//调用strcmp函数
printf("strcmp(s1,s2)=%d\n",result);//输出比较结果
return 0;
}
```
测试结果:
```
请输入两个字符串s1和s2:
boy
bad
strcmp(s1,s2)=14
```
说明两个字符串不相等,它们两者第一个不同字符的ascii码差值为14。
### 回答3:
strcmp函数是C语言标准库中的一个字符串比较函数,用于比较两个字符串的大小关系。以下是一个自己编写的strcmp函数。
int strcmp(char *p1, char *p2)
{
int i = 0;
while (*(p1 + i) != '\0' && *(p2 + i) != '\0') //判断两个字符串是否都遍历完了
{
if (*(p1 + i) != *(p2 + i)) //找到第一个不同的字符
{
return *(p1 + i) - *(p2 + i); //返回它们两者第一个不同字符的ascii码差值
}
i++;
}
if (*(p1 + i) == '\0' && *(p2 + i) == '\0') //如果两个字符串完全相等
{
return 0; //返回值为0
}
else if (*(p1 + i) != '\0') //如果s1比s2长
{
return *(p1 + i); //返回s1剩余部分的ascii码差值
}
else //如果s2比s1长
{
return -*(p2 + i); //返回s2剩余部分的ascii码差值
}
}
在main函数中调用该函数,并输入两个字符串s1和s2,如下所示。
int main()
{
char s1[100], s2[100];
printf("请输入字符串s1:");
scanf("%s", s1);
printf("请输入字符串s2:");
scanf("%s", s2);
int result = strcmp(s1, s2);
printf("比较结果为:%d\n", result);
return 0;
}
如果s1和s2相等,则输出0;如果s1>s2,则输出正值;如果s2>s1,则输出负值。
阅读全文