演算法訓練 比較字串 (藍橋杯C++)
阿新 • • 發佈:2019-01-30
先上程式碼吧!
#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;
}