首页 > 学院 > 开发设计 > 正文

实现比较字符串大小的方法(不使用系统方法)

2019-11-08 19:35:55
字体:
来源:转载
供稿:网友

有这样一个题目 字符串(实现字符串比较函数) 输入两个字符串,然后不区分大小写进行比较,输出比较结果; 要求实现一个字符串比较函数,不区分大小写进行比较,如果第一个字符串大输出1,相等输出0,小于输出-1。 比如: 输入 HELLO hello 输出为0 输入 hello hello 输出为0 输入 Hello hEllo 输出为0 输入 hello gello 输出为1 输入 hello jello 输出为-1

在看到这个题目的时候,我们通常的想法是分情况讨论,如果两个字符串的长度一样,那么我们按照顺序比较即可不用担心越界的问题,但是这里会出现冗余代码的问题

static int MyCompare2(string str, string str2){ //字符串str的长度大于str2的长度 if (str.Length > str2.Length) { //取比较短的字符串作为比较对象 不用担心越界的问题 for (int i = 0; i < str2.Length; i++) { //下面的比较代码就是和else if中的代码就构成了冗余的代码 if (str[i] > str2[i]) { return 1; } else if (str[i] < str2[i]) { return -1; } } return 1; } //字符串str的长度小于str2的长度 else if (str.Length < str2.Length) { //取比较短的字符串作为比较对象 不用担心越界的问题 for (int i = 0; i < str.Length; i++) { if (str[i] > str2[i]) { return 1; } else if (str[i] < str2[i]) { return -1; } } return -1; } //剩下的就是相等的情况了,直接返回0 return 0;}

我们要把冗余代码去掉 改进方法后的代码如下

static int MyCompare2(string str, string str2){ //我们取第一个字符串为比较对象 假如str的字符串比较短,那么在i++过后i编程str.Length的时候将会跳出循环 for (int i = 0; i < str.Length; i++) { //如果str的长度比较短,那么在i++过后i编程str2.Length的时候将会执行break跳出循环 if (i > str2.Length-1) { break; } if (str[i] > str2[i]) { return 1; } else if (str[i] < str2[i]) { return -1; } } //这时候我们来判断字符串的长短就可以得到 //首先我们来看返回值的特征 -1 0 1 绝对值是相对0对称的,那么我们可以考虑结合绝对值思考问题 //因为去取-1还是取1是取决于str.Length - str2.Length还是str2.Length - str1.Length,如果str.Length > str2.Length那么(str.Length - str2.Length) / Math.Abs(Math.Abs(str.Length - str2.Length))就是1 ;如果str.Length < str2.Length那么(str.Length - str2.Length) / Math.Abs(Math.Abs(str.Length - str2.Length))就是-1;否则就是0; return Math.Abs(str.Length - str2.Length) == 0 ? 0 : (str.Length - str2.Length) / Math.Abs(Math.Abs(str.Length - str2.Length));}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表