题意整理。

  • 编写一个函数,比较两个字符串的大小。
  • 前者大于后者返回1,小于返回-1,等于返回0.。

方法一(循环)

1.解题思路

  • 通过循环逐一比较两字符串中对应位置每个字符的大小。
  • 如果src当前字符小于dst,说明src小于dst,返回-1。如果src当前字符大于dst,说明src大于dst,返回1。如果相等,则指针后移。
  • 如果src后面还有字符,返回1。如果dst后面还有字符,返回-1。如果都没有,返回0。

动图展示: alt

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,循环最多需要执行min(n,m)min(n,m)次,所以时间复杂度为O(min(n,m))O(min(n,m))
  • 空间复杂度:需要额外常数级别的空间,所以空间复杂度为O(1)O(1)