用c++指针写一个strcmp函数
时间: 2024-10-13 17:09:34 浏览: 2
在C++中,标准库函数`strcmp()`用于比较两个字符串是否相等。如果你想用指针编写一个类似功能的函数,可以创建一个接受字符数组指针作为参数的函数。这里是一个简单的版本,它假设传入的指针指向的是有效的、以空字符('\0')结尾的字符串:
```cpp
#include <cstring> // 为了使用strlen()获取字符串长度
int strcmp(char* str1, char* str2) {
int len1 = strlen(str1);
int len2 = strlen(str2);
// 如果两个字符串的长度不同,则它们肯定不相等
if (len1 != len2)
return len1 > len2 ? 1 : -1;
// 指针遍历字符串,逐字节比较直到找到'\0'
for (size_t i = 0; i < len1 && str1[i] == str2[i]; ++i) {}
// 如果某个字符串在这之前结束(因为另一个更长),则短的那个是较小的
return str1[i] < str2[i] ? -1 : 1;
}
相关问题
用c++写一个string的strcmp函数的模拟实现
在C++中,`strcmp` 函数是标准库中的一个用于比较两个C风格字符串的函数,它的原型通常位于 `<cstring>` 头文件中。下面是一个简单的模拟实现,它逐个字符比较两个字符串直到发现不同的字符或者到达字符串的结尾:
```cpp
#include <iostream>
// 函数声明
int myStrcmp(const char* str1, const char* str2);
int main() {
const char* str1 = "Hello";
const char* str2 = "World";
int result = myStrcmp(str1, str2);
if (result < 0) {
std::cout << str1 << " is less than " << str2 << std::endl;
} else if (result > 0) {
std::cout << str1 << " is greater than " << str2 << std::endl;
} else {
std::cout << str1 << " is equal to " << str2 << std::endl;
}
return 0;
}
// 函数定义
int myStrcmp(const char* str1, const char* str2) {
while (*str1 && (*str1 == *str2)) {
str1++;
str2++;
}
return *(const unsigned char*)str1 - *(const unsigned char*)str2;
}
```
上述实现中,`myStrcmp` 函数会返回三种可能的值:
- 小于0的值:如果第一个字符串在字典顺序上小于第二个字符串;
- 大于0的值:如果第一个字符串在字典顺序上大于第二个字符串;
- 等于0:如果两个字符串相等。
需要注意的是,在比较字符时,将指针指向的`char`类型转换为`unsigned char`类型,这是为了确保比较操作能够在所有平台上以一致的方式执行,因为`char`类型在不同平台上可能表示有符号或无符号的字符。
用c++写一个模拟strcmp函数的int型新函数,不要用指针,返回值:相等为0,不相等为第1个不相等字符的ascii码的差值
这里提供一种基于字符数组的实现方法:
```c++
int my_strcmp(const char str1[], const char str2[]) {
int i = 0;
while (str1[i] != '\0' && str2[i] != '\0') { // 遍历字符串
if (str1[i] != str2[i]) { // 如果字符不相等
return (int)str1[i] - (int)str2[i]; // 返回差值
}
i++;
}
if (str1[i] == '\0' && str2[i] == '\0') { // 如果两个字符串都遍历完了
return 0; // 返回0,表示相等
}
else { // 否则返回未遍历完的字符串的第一个字符的ascii码
return (int)str1[i] - (int)str2[i];
}
}
```
其中,`str1[]` 和 `str2[]` 分别表示两个待比较的字符串,`i` 表示当前比较到的字符的下标。函数首先遍历两个字符串,如果当前字符不相等,则返回它们的差值;如果两个字符串都遍历完了,则表示它们相等,返回0;否则返回未遍历完的字符串的第一个字符的ascii码的差值。
需要注意的是,该函数没有对输入的字符串长度进行检查,如果传入的字符串长度超过了数组的长度,可能会导致数组越界。