用指针法编写函数int cmpstr(char *p,char *q),比较两个字符串大小(不要用strcmp函数)。
时间: 2023-06-16 21:04:31 浏览: 45
可以使用指针法来实现字符串比较函数,具体实现如下:
```c
int cmpstr(char *p, char *q) {
while (*p != '\0' && *q != '\0' && *p == *q) {
p++;
q++;
}
if (*p == '\0' && *q == '\0') { // 两个字符串相等
return 0;
} else if (*p == '\0' || *p < *q) { // p字符串较短或者当前字符小于q字符串的对应字符
return -1;
} else { // p字符串较长或者当前字符大于q字符串的对应字符
return 1;
}
}
```
该函数的实现思路是,使用两个指针分别指向待比较的两个字符串的首字符,然后逐个字符比较,若两个字符相等则继续比较下一个字符,直到其中一个字符串结束或者两个字符串的当前字符不相等。如果两个字符串都结束了,则说明两个字符串相等;否则,若当前字符不相等,则返回两个字符串当前字符的大小关系(即较小的字符串在字典序中排在前面)。
相关问题
用指针法编写函数int cmpstr(char *p,char *q),比较两个字符串大小(不要用strcmp函数)
可以使用指针法遍历两个字符串,逐个比较字符的ASCII码值大小,实现比较字符串大小的功能。以下是示例代码:
```c
int cmpstr(char *p, char *q) {
while (*p && *q) {
if (*p > *q) {
return 1;
} else if (*p < *q) {
return -1;
}
p++;
q++;
}
if (*p == '\0' && *q == '\0') {
return 0;
} else if (*p == '\0') {
return -1;
} else {
return 1;
}
}
```
函数中,首先使用while循环遍历两个字符串,只要两个字符串都没有遍历到结尾,就继续比较字符的大小。如果p所指向的字符大于q所指向的字符,说明p字符串比q字符串大,返回1;如果p所指向的字符小于q所指向的字符,说明p字符串比q字符串小,返回-1。如果两个字符相等,则继续比较下一个字符。
当循环结束后,如果p和q都遍历到了结尾,说明两个字符串相等,返回0;如果p遍历到了结尾而q还没有遍历到结尾,说明p字符串比q字符串小,返回-1;如果q遍历到了结尾而p还没有遍历到结尾,说明p字符串比q字符串大,返回1。
输入2个字符串,每个字符串的长度均不超过80字符,用自己实现的cmpstr()函数完成这两个字符串的大小比较,cmpstr()函数的功能和字符串比较函数strcmp()的功能相同。
好的,我可以帮你解决这个问题。你可以参考下面的代码实现:
```c++
#include <iostream>
#include <cstring>
using namespace std;
int cmpstr(char* s1, char* s2) {
int len1 = strlen(s1), len2 = strlen(s2);
int len = min(len1, len2);
for (int i = 0; i < len; i++) {
if (s1[i] < s2[i]) return -1;
else if (s1[i] > s2[i]) return 1;
}
if (len1 < len2) return -1;
if (len1 > len2) return 1;
return 0;
}
int main() {
char s1[81], s2[81];
cin >> s1 >> s2;
cout << cmpstr(s1, s2) << endl;
return 0;
}
```
上述代码中,cmpstr() 函数首先计算两个字符串的长度,并取较小的那个长度,然后依次比较两个字符串的每个字符,直到发现不相同的字符或者比较完了较小长度的子串。如果两个字符串的长度不相等,则剩下的字符会被视为更大的字符串。最后,如果两个字符串完全相同,则返回0。在 main() 函数中,我们读入两个字符串,并输出它们的大小比较结果。
希望这个代码能够帮到你。