b532 - 字串處理
題目描述
題目要求解析包含數字、字母和運算符號 (+, -, *, /, %) 的字串,提取左右兩邊的數字,並根據運算符號計算結果。輸入有多行字串,每行字串包含一個運算式。
解題思路
程式碼使用貪婪演算法逐字解析輸入字串。它迭代字串中的每個字符,並根據字符的類型將其歸類為數字、運算符號或字母。當遇到數字時,它會將數字字符轉換為整數並累加到 b 變數中。當遇到運算符號時,它會將 b 除以 10 (去除末尾多餘的 0) 並將其存儲在 c 變數中,然後將 b 重置為 0。最後,根據運算符號執行相應的計算,並輸出結果。
複雜度分析
- 時間複雜度: O(n),其中 n 是輸入字串的長度。程式碼需要遍歷字串一次。
- 空間複雜度: O(1),程式碼使用的額外空間是固定的,不隨輸入大小而變化。
程式碼
#include <iostream>
#include <string>
using namespace std;
int main(){
string a;
getline(cin,a);
while(getline(cin,a)){
int b=0,c=0;
char q;
for(int i=0;i<a.length();i++){
if(a[i]>='0'&&a[i]<='9'){
b+=a[i]-48;
b*=10;
}
else if(a[i]=='+'||a[i]=='-'||a[i]=='*'||a[i]=='/'||a[i]=='%'){
q=a[i];
c=b/10;
b=0;
}
}
b/=10;
if(q=='+')
cout << b+c << endl;
else if(q=='-')
cout << c-b << endl;
else if(q=='*')
cout << b*c << endl;
else if(q=='/')
cout << c/b << endl;
else
cout << c%b << endl;
}
}