先上代码吧!
#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
#include<queue>
#include<stack>
#include<cmath>
using namespace std;
int Differ(string s1, string s2) {//第一个不同字符的差值
int num1, num2;
num1 = s1.size(); num2 = s2.size();
int n = ((num1 > num2) ? num2 : num1);
for (int i = 0; i < n; i++) {
if (s1[i]!=s2[i]) {
return abs(s1[i]-s2[i]);
}
}
}
int Compare(string s1,string s2) {
int num1, num2;
num1 = s1.size(); num2 = s2.size();
if (num1==num2) {//当长度相等的时候
for (int i = 0; i < num1;i++) {
if (s1[i]!=s2[i]) {//不相等,先判断大小,然后输出差值
if (s1[i] > s2[i]) {
return Differ(s1,s2);
//return abs(s1[0] - s2[0]);
}
else//小于的情况,输出负数
return (-1)*Differ(s1, s2);
//return (-1)*abs(s1[0] - s2[0]);//
}
}
return 0;//当全部都相等的时候输出0;
}
else {//长度不等,不存在字符串相等的可能
int n = ((num1 > num2) ? num2:num1);
//cout << n<<endl;
for (int i = 0; i < n; i++) {
if (s1[i] > s2[i]){
return Differ(s1, s2);
}
if (s1[i] == s2[i]) {
continue;
}
if (s1[i] < s2[i]) {//小于的情况,输出负数
return (-1)*Differ(s1, s2);
}
}
}
}
int main() {
string s1, s2;
cin >> s1 >> s2;
cout<<Compare(s1, s2);
return 0;
}
string字符串比较的知识点: 设s1,s2为两个字符串
1)当s1和s2的长度相等并且字符串的每个单元都相等的时候这两个字符串相等;
2)当它们长度不相等(也就是字符串不会相等的时候),比较相同单元的字母的ASCII的大小,对应的字母大的字符串也就大!比如 :abc 和 acd ,acd大;abc 和 cd, cd大;
本题的代码比较,有一点稍微要注意下:就是当两个字符串的长度不相等的时候,应该要考虑如果遇到单元的字母相同的情况,如果对于的相同单元的字母相同应该直接continue,进行下一个单元!
笔者这一点也没注意,第一次提交才91分!
也就是:if (s1[i] == s2[i]) {
continue;
}