用指针法编写函数int cmpstr(char *p,char *q),比较两个字符串大小(不要用strcmp函数)。
时间: 2023-06-16 11:04:23 浏览: 101
可以使用指针来比较两个字符串的大小,具体实现如下:
```C
int cmpstr(char *p, char *q) {
while (*p == *q && *p != '\0') { // 指针指向的字符相等
p++;
q++;
}
return (*p - *q); // 返回两个指针指向字符的差值
}
```
该函数首先通过 while 循环比较两个指针所指向字符是否相等,如果相等则继续向后比较,直到两个指针所指向的字符不相等或者到达字符串结尾。最后返回两个指针指向字符的差值,如果差值为 0,则两个字符串相等;如果差值小于 0,则第一个字符串小于第二个字符串;如果差值大于 0,则第一个字符串大于第二个字符串。
需要注意的是,在比较两个字符时,需要判断字符是否为字符串结尾符 '\0'。
相关问题
(2)编写函数cmpStr(char s1[],char s2[])比较两个字符串s1和 s2的大小。如果s1>s2,返回一个正数;s1=s2,返回0;s1<s2,返回一个负数,在主函数中调用该函数完成字符串的比较操作,并输出返回的值。 要求: ①不允许使用strcmp()函数; ②用fgets()函数在主函数中输入两个字符串; ③实现触摸屏受托人()函数,返回的正数或负数的绝对值应该是进行比较的两个字符传中相应字符的ASCII码的差值。
以下是实现要求的cmpStr函数的代码:
```c
#include <stdio.h>
int cmpStr(char s1[], char s2[]) {
int i = 0;
while (s1[i] != '\0' || s2[i] != '\0') {
if (s1[i] > s2[i]) {
return s1[i] - s2[i];
} else if (s1[i] < s2[i]) {
return s1[i] - s2[i];
} else {
i++;
}
}
return 0;
}
int main() {
char s1[100], s2[100];
printf("请输入第一个字符串:");
fgets(s1, 100, stdin);
printf("请输入第二个字符串:");
fgets(s2, 100, stdin);
int result = cmpStr(s1, s2);
printf("比较结果为:%d", result);
return 0;
}
```
在该代码中,cmpStr函数首先使用while循环遍历两个字符串,并分别比较每个字符的ASCII码值。如果两个字符不相等,则直接返回它们的差值;如果相等,则继续比较下一个字符。如果遍历完了两个字符串还没有发现不同的字符,则说明两个字符串相等,返回0即可。
在主函数中,使用fgets函数分别读入两个字符串,并调用cmpStr函数进行比较。最后输出比较结果即可。由于fgets函数会将读入的字符串末尾的换行符也读入,因此在比较过程中需要注意判断字符串是否已经结束。
编写函数cmpStr(char s1[],char s2[])比较两个字符串s1和 s2的大小。如果s1>s2,返回一个正数;s1=s2,返回0;s1<s2,返回一个负数,在主函数中调用该函数完成字符串的比较操作,并输出返回的值。
以下是实现该函数的代码:
```c
int cmpStr(char s1[], char s2[]) {
int i = 0;
while (s1[i] != '\0' && s2[i] != '\0') {
if (s1[i] > s2[i]) {
return 1;
} else if (s1[i] < s2[i]) {
return -1;
}
i++;
}
if (s1[i] == '\0' && s2[i] == '\0') {
return 0;
} else if (s1[i] == '\0') {
return -1;
} else {
return 1;
}
}
```
在主函数中可以这样调用:
```c
#include <stdio.h>
int cmpStr(char s1[], char s2[]);
int main() {
char s1[] = "hello";
char s2[] = "world";
int result = cmpStr(s1, s2);
printf("%d\n", result);
return 0;
}
```
输出结果为:1,表示s1大于s2。
阅读全文