題目:
給定乙個字串str,求其中全部數字串所代表的數字之和。
要求:
忽略小數點字元,如"a1.3",其中包含兩個數字1和3;
如果緊貼數字子川的左側出現字元"-",當連續出現的數量為奇數時,則數字視為負,偶數時,則數字視為正。如"a-1bc--12",其中包含數字為-1和12。
舉例:
str="a1cd2e33",返回36;
str="a-1b--2c--d6e",返回7。
難度:★
思路:(考慮問題不全面)
以前對於這種題目,慣用方法是巢狀迴圈,這樣雖然也能實現,但時間複雜度就是o(n^2)數量級的,達不到練習的目的。
對於這種題目,對整個字串進行遍歷,在遍歷的過程中對每個字元進行相應處理。
在迴圈遍歷中,我分成三種情況討論,一種是數字字元,一種是'-'字元,一種是其他情形;並對不同的情形做不同處理。
若是數字字元,對其進行數字識別;若是'-'字元,則對符號位取反;若是其他情形,則根據符號位決定數字的正負,將其累加,並將符號位和數字變數置零。
**:
#include #include using namespace std;
int main()
} cout << sum << endl;
system("pause");
return 0;
}
本以為我考慮的比較全面了,但是查閱書本上的講解,發現其實有很多疏漏。
如"-1-2-3",應該返回-6,但程式給出的結果是0。這就是沒有考慮到'-'字元也是作為數字識別結束的標誌;
而且對於邊界問題,考慮的也不全面。so, this is not a good solution......
對字串進行遍歷,判斷每個字元是數字字元還是非數字字元。
如果是數字字元,更新數字變數;如果是非數字字元,首先判斷符號標誌位確定正負,再累加,對數字變數置零;並判斷給非數字字元是否為'-',如果該位字元是'-',則判斷前乙個字元是否也是'-',如果前乙個是'-',則對符號標誌位取反;若不是,則對符號標誌位置一;如果該位字元不是『-』,對符號標誌位置零。
注意,對於最後一位是數字,則需要對其進行單獨考慮。
#include #include using namespace std;
int main()
} else
else
flag = 0;
} }cout << sum << endl;
system("pause");
return 0;
}
字串中數字子串求和
題目 給定乙個字串s,求其中全部數字串所代表的數字之和。要求 忽略小數點字元,例如 a1.3 其中包含兩個數字1和3。如果緊貼數字子串的左側出現字元 當連續出現的數量為奇數時,則數字視為負,連續出現的數量為偶數時,則數字視為正。例如,a 1bc 12 其中包含數字為 1和12。舉例 s a1.3 返...
字串 字串中數字子串的求和
題目 給定乙個字串str,求其中全部數字串所代表的數字之和。要求如下 忽略小數點字元,例如 a1.3 其中包含兩個數字1和3.如果緊貼數字子串的左側出現字元 當連續出現的數量為奇數時,則數字視為負,連續出現的數量為偶數時,則數字視為正。例如,a 1bc 12 其中包含數字 1和12。舉例 str a...
字串中數字子串求和問題
輸入 ab34c57ddo 輸出 91 輸入 1ab 2c78 輸出 79 說明 奇數個 表示負號,偶數個 表示正號 下面這個思路又麻煩又複雜,還只能實現正號的操作,愚蠢至極,記錄一下豈不也快哉 下面這個方法將字串遍歷一次,將找到連續的數字字串存放到vectorsub中,然後再將所有的sub存放到v...