d422 - 2.字串處理
題目描述
題目要求根據輸入字串中的數字和字母,輸出特定圖形。字串中數字表示後續字母重複出現的次數,如果數字有多位數,則將各位數相加得到總次數。小寫字母 'b' 代表空格,'!' 代表換行。
解題思路
程式碼直接遍歷輸入字串。當遇到數字時,計算數字的總和(如果數字有多位數)。然後,根據計算得到的數字,重複輸出後面的字母。如果遇到 'b',則輸出空格。如果遇到 '!',則輸出換行。程式碼使用一個迴圈來處理輸入字串,並根據字元類型執行相應的操作。
複雜度分析
- 時間複雜度: O(N),其中 N 是輸入字串的長度。因為程式碼需要遍歷整個輸入字串。
- 空間複雜度: O(1),程式碼只使用了常數級別的額外空間。
程式碼
#include <iostream>
#include <string>
using namespace std;
int main(){
string a;
while(getline(cin,a)){
for(int i=0,al=a.length(),n=0;i<al;i++){
if(a[i]>='0'&&a[i]<='9'){
n+=a[i]-'0';
while(a[i+1]>='0'&&a[i+1]<='9'){
i++;
n+=a[i]-'0';
}
i++;
if(a[i]=='b')
a[i]=' ';
while(n--)
cout << a[i];
}
else if(a[i]=='!')
cout << "\n";
n=0;
}
cout << "\n";
}
}