题目的主要信息:

  • 编写一个函数 int mystrcmp(const char * src, const char * dst),用于比较两个字符串的大小
  • 要求大于返回 1,小于返回 -1,相等返回 0

具体做法:

题目所给的代码中,输入的字符串是一个字符数组,采用getline函数输入,这样会在输入的末尾增加一个'\0'表示字符串的结束,如果长度小于数组长度,输入所有字符后加'\0',如果长度大于数组长度,截断输入的前面部分再在最后加'\0'。

输入函数的是两个字符数组指针,我们对两个指针不断往后移,并比较找到第一个两个指针指向元素不同的地方,然后直接根据那个位置字符相减得到返回结果的正负或者0.

alt

#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;
}

复杂度分析:

  • 时间复杂度:O(n)O(n)nn为较短的字符串的长度,最坏遍历较短的字符串全部字符
  • 空间复杂度:O(1)O(1),只有指针,无额外空间