d098 - Stringstream運用練習(C++)
題目描述
題目要求從輸入字串中提取僅包含數字的單字,並計算這些單字的總和。輸入字串包含多個以空格分隔的單字,可能有多個連續的空格。
解題思路
程式碼透過迭代輸入字串,並使用迴圈將字串分割成單字。對於每個單字,程式碼檢查它是否僅包含數字。如果單字僅包含數字,則將其轉換為整數並加到總和中。程式碼使用 getline 讀取整行輸入,然後使用迴圈和索引來提取單字。b.clear() 用於在處理完一個單字後清空 b 字串,以便處理下一個單字。
複雜度分析
- 時間複雜度: O(n*m),其中 n 是輸入字串的長度,m 是單字的最大長度。最壞情況下,需要遍歷整個輸入字串,並檢查每個單字是否為數字。
- 空間複雜度: O(m),其中 m 是單字的最大長度。程式碼使用一個字串
b來儲存單字,其大小取決於單字的最大長度。
程式碼
#include <iostream>
#include <string>
using namespace std;
int main(){
string a;
while(getline(cin,a)){
string b;
int al=a.length(),ans=0;
for(int i=0;i<=al;i++){
if(a[i]!=' '&&i!=al){
b+=a[i];
}
else{
int bl=b.length();
bool c=0;
for(int j=0;j<bl;j++){
if(b[j]>'9'||b[j]<'0'){
c=1;
break;
}
}
if(c!=1){
int x=0;
for(int j=0;j<bl;j++){
x*=10;
x+=b[j]-48;
}
ans+=x;
}
b.clear();
}
}
cout << ans << "\n";
}
}