java:比较字符串
题目
编程实现两个字符串s1和s2的字典序比较。(保证每一个字符串不是另一个的前缀,且长度在100以内)。若s1和s2相等,输出0;若它们不相等,则指出其第一个不同字符的ASCII码的差值:如果s1>s2,则差值为正;如果s1<s2,则差值为负。
样例输入
java basic
样例输出
8
我的思路
首先要分两种情况
相等的情况
不相等的情况
相等的时候就是:长度相等,字符也对应
不相等的时候就是相等的对面,之后要判断第一个不同的字符之间的ASCII码的值,这个可以直接进行相减就行
介绍一个compareTo方法
String 对象调用compareTo(String s)方法,按照字典序与参数指定的String对象s的字符序列比较大小。如果当前String对象的字符序列与s相同,则该方法返回0,如果大于s的字符序列,该方法返回正值,如果小于s的字符序列,则返回负值。
还有一个方法
equals(Sting)方法
比较当前String对象的字符序列是否与参数s指定的String对象的字符序列相同
注意:public boolean equalsIgnore-Case(String s)比较当前String对象的字符序列与参数指定的String对象s的字符序列是否相同,比较时忽略大小写
而public int compareToIgnoreCase(String s)方法是忽略大小写的
注意:我忽略了一个问题,就是compareTo返回的是是否大小或等于0,但是题目要求我返回的是数值,所以还要进行编写
indexOf是进行索引,可以索引到位置,但是我并不知道他们什么时候不同啊。这个要怎么算
public char[] to CharArray():
将String 对象的字符系列的全部字符存放在一个字符数组中的方法
我写出来了
我这里是先判断如果两字符串相等了,这里直接用equals来进行判断,如果相等就输出0
后面的就是不相等,不相等首先要判断哪个长一点,如果s1长就进行对比的时候要长度要算到s1,也可以算到短的哪个加1,因为空出来的也要进行对比。之后再进行判断,这里的比较字符串是同位相比,不是像我之前的程序就是两个for循环,这里切记。之后就进行输出就可以了,这里我是直接把字符串直接转换为整数,最后如果判断了要记得break,要不然会一直循环
import java.util.Scanner;
public class 比较字符串 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
String s1=sc.next();//输入字符串s1
String s2=sc.next();//输入字符串s2
if(s1.equals(s2)){//当相等的时候
System.out.println(0);
}else{//当不相等的时候
//如果s1的长度大于等于s2
char [] a,b;//定义两个数组
a=s1.toCharArray();//把s1,s2的字母存在数组里面保存
b=s2.toCharArray();
if(a.length>=b.length){//如果s1的长度大于等于s2时
for(int i=0;i<s1.length();i++){//进行检索
if(a[i]!=b[i]){
int n=(int)(a[i]-b[i]);//输出结果
System.out.print(n);
break;
}
}
}else{//如果s1字符串小于s2,
for(int i=0;i<s2.length();i++){
if(a[i]!=b[i]){
int n=(int)(a[i]-b[i]);//输出结果
System.out.print(n);
break;
}
}
}
}
}
}
他人的算法
我来讲一下其他博主的算法,他的主要步骤就是先进行长度判断,赋予同一个值,之后输出的时候分情况,之后比较,比较他是用的比较头字母,如果相等就移除,这样子是比我的算法可以少进行一个循环,到了最后就直接比了。但有个问题,如果他们前面的全部相等后面的就还是要比较啊,好像题目中说了不能是前缀,如果是这样,我的代码也可以直接比较长度较短的时候就行了。后面的就是输出了,也没有什么好讲的了
import java.util.Scanner;
public class 比较字符串 {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
String s = sc.next();
String ss = sc.next();
char [] num1 = s.toCharArray();
char [] num2 = ss.toCharArray();
int a = 0;int temp=0;
if(num1.length>num2.length){
a=num2.length;
temp=1;
}
else {
a=num1.length;
temp=2;
}
for (int i = 0; i < a; i++) {
if(num1[0]!=num2[0]){
int b = Math.abs(num1[0]-num2[0]);
System.out.println(b);
System.exit(0);
}
}
if(temp==1){
System.out.println(num1[a]);
}
else {
System.out.println(num2[a]);
}
}
}