编写一个函数,实现两个字符串的比较。即自己写一个strcmp函数,函数原型为 strcmp(char *p1,char *p2) 设p1指向字符串s1,p2指向字符串s2.要求当s1=s2时,返回值为0;若s1≠s2,返回他们二者第一个不同字符的ascii码差值;如果s1>s2,则输出正值;若s1<s2,则输出负值。
时间: 2023-05-31 07:20:43 浏览: 496
用一个函数实现两个字符串的比较,即自己写一个 strcmp 函数
### 回答1:
可以按照以下步骤编写一个strcmp函数:
1. 定义函数,函数名为strcmp,参数为两个指向字符数组的指针p1和p2。
2. 使用while循环遍历两个字符串,当两个字符串中的字符不相同时,跳出循环。
3. 在循环中,比较p1和p2指向的字符,如果相等,继续循环;如果不相等,返回它们的ascii码差值。
4. 如果循环结束后两个字符串相等,返回;如果p1指向的字符大于p2指向的字符,返回正值;如果p1指向的字符小于p2指向的字符,返回负值。
下面是一个示例代码:
```c
int strcmp(char *p1, char *p2) {
while (*p1 && *p2 && *p1 == *p2) {
p1++;
p2++;
}
return *p1 - *p2;
}
```
注意,这个函数只比较两个字符串的第一个不同字符,如果两个字符串中间有空格或其他字符,也会被视为不同字符。如果需要比较整个字符串,可以使用strcmp库函数。
### 回答2:
对于这道题目,我们需要编写一个自己的strcmp函数。实现步骤如下:
1.定义函数:int strcmp(char *p1, char *p2)
2.使用while循环来遍历两个字符串,当*p1和*p2不等时,退出循环。
3.在循环中,每次比较*p1和*p2的值,如果它们相等,则*p1和*p2都向后移动一位;如果它们不相等,则返回它们的差值。
4.在循环结束后,判断*p1和*p2的值是否都为'\0'。如果是,说明两个字符串相同;如果否,说明两个字符串不同,返回它们的差值。
完整代码如下:
int strcmp(char *p1, char *p2) {
while (*p1 == *p2) {
if (*p1 == '\0' && *p2 == '\0') {
return 0;
}
p1++;
p2++;
}
return (*p1 - *p2);
}
这个strcmp函数的实现过程其实就是遍历两个字符串,如果发现不同的地方,就直接返回它们的差值。如果一直都相同,就会一直执行循环,直到遇到'\0'为止。最后判断*p1和*p2是否都为'\0',来判断两个字符串是否相同。
使用这个函数,我们可以很方便地比较两个字符串的大小。相信大家在准备面试时,也会遇到这个问题,我希望这个回答可以帮到你们,谢谢!
### 回答3:
字符串比较是程序开发中常用的功能,标准库中也有自带的strcmp函数,但是我们也可以自己实现一个strcmp函数。
思路如下:
首先,我们需要用指针p1和p2分别指向两个字符串s1和s2的首地址。
然后,我们需要利用循环来逐个比较两个字符串中的每个字符,如果两个字符相等,就继续往后比较;如果有一个字符不相等,就可以直接返回它们的ascii码差值了。
如果一个字符串比另一个字符串长,那么我们只需要比较能够对应的部分,如果前一部分相同,就返回长度差值。
最后,如果两个字符串完全相等,就返回0。
下面是具体实现:
```c
#include <stdio.h>
int strcmp(char *p1, char *p2)
{
while (*p1 && *p2 && (*p1 == *p2))
{
p1++;
p2++;
}
if (*p1 == *p2)
{
return 0;
}
else
{
return *p1 - *p2;
}
}
int main()
{
char s1[100], s2[100];
printf("请输入两个字符串:\n");
scanf("%s%s", s1, s2);
int result = strcmp(s1, s2);
printf("比较结果为%d\n", result);
return 0;
}
```
在主函数里面,我们从用户输入中读取两个字符串,然后调用自定义的strcmp函数进行比较,并输出结果。
最后,这个自定义的strcmp函数可以与标准库中的strcmp函数兼容,具有相同的功能,但是实现方式不同。
阅读全文