题目的主要信息:
- 编写一个函数 int mystrcmp(const char * src, const char * dst),用于比较两个字符串的大小
- 要求大于返回 1,小于返回 -1,相等返回 0
具体做法:
题目所给的代码中,输入的字符串是一个字符数组,采用getline函数输入,这样会在输入的末尾增加一个'\0'表示字符串的结束,如果长度小于数组长度,输入所有字符后加'\0',如果长度大于数组长度,截断输入的前面部分再在最后加'\0'。
输入函数的是两个字符数组指针,我们对两个指针不断往后移,并比较找到第一个两个指针指向元素不同的地方,然后直接根据那个位置字符相减得到返回结果的正负或者0.
#include <iostream>
using namespace std;
int mystrcmp(const char* src, const char* dst);
int main() {
char s1[100] = { 0 };
char s2[100] = { 0 };
cin.getline(s1, sizeof(s1));
cin.getline(s2, sizeof(s2));
int ret = mystrcmp(s1, s2);
cout << ret << endl;
return 0;
}
int mystrcmp(const char* src, const char* dst) {
while(*src && *dst && *src == *dst){ //找到两个字符串第一个不同的字符
src++;
dst++;
}
if(*src - *dst > 0) //根据字符大小来返回
return 1;
else if(*src - *dst == 0)
return 0;
else
return -1;
}
复杂度分析:
- 时间复杂度:,为较短的字符串的长度,最坏遍历较短的字符串全部字符
- 空间复杂度:,只有指针,无额外空间