1. 程式人生 > >演算法訓練 比較字串 (藍橋杯C++)

演算法訓練 比較字串 (藍橋杯C++)

這裡寫圖片描述

先上程式碼吧!

#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,進行下一個單元!


也就是:if (s1[i] == s2[i]) {
continue;
}
筆者這一點也沒注意,第一次提交才91分!