题意整理。
- 编写一个函数,比较两个字符串的大小。
- 前者大于后者返回1,小于返回-1,等于返回0.。
方法一(循环)
1.解题思路
- 通过循环逐一比较两字符串中对应位置每个字符的大小。
- 如果src当前字符小于dst,说明src小于dst,返回-1。如果src当前字符大于dst,说明src大于dst,返回1。如果相等,则指针后移。
- 如果src后面还有字符,返回1。如果dst后面还有字符,返回-1。如果都没有,返回0。
动图展示:
2.代码实现
#include <iostream>
#include <cstring>
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) {
//计算src和dst长度
int len1=strlen(src);
int len2=strlen(dst);
int i=0,j=0;
while(i<len1&&j<len2){
//如果src当前字符小于dst,说明src小于dst,返回-1
if(src[i]<dst[j]){
return -1;
}
//如果src当前字符大于dst,说明src大于dst,返回1
else if(src[i]>dst[j]){
return 1;
}
//如果src当前字符等于dst,两指针后移
else{
i++;
j++;
}
}
//如果src后面还有字符,返回1
if(i<len1){
return 1;
}
//如果dst后面还有字符,返回-1
else if(j<len2){
return -1;
}
else{
return 0;
}
return 0;
}
3.复杂度分析
- 时间复杂度:假设两字符串长度为n和m,循环最多需要执行次,所以时间复杂度为。
- 空间复杂度:需要额外常数级别的空间,所以空间复杂度为。