我無法從輸入字符串中分離數字和字符。我的程序的目的是進行加,減,乘,在後綴劃分 所以我不能預測該輸入形式,因爲它可以從 2 2 3 + *(回答爲10)到2 2任何+ 3 *(答案是12)。所以我不能使用sscanf來提取數字和運算符字符,而沒有特定的格式輸入字符串。我應該在這裏做什麼?從字符串中提取數字和字符,它不遵循特定的格式? (後綴計算器)
1
A
回答
2
好了,來處理你將要實現堆棧後綴,所以你應該將每個數字推到堆棧上,每個操作員從堆棧中彈出兩個數字並將結果推回。
0
我會推薦使用Boost.Spirit Qi,這是一個非常好的解析器庫。第一個例子是一個計算器...
http://www.boost.org/doc/libs/1_42_0/libs/spirit/doc/html/spirit/introduction.html
標準庫唯一的解決辦法:
// Get a line of user input (simplifies I/O)
std::string line;
if (!std::getline(std::cin, line)) throw std::runtime_error("Unable to read line");
// Process the line as an input string stream
std::istringstream iss(line);
while (true) {
unsigned int val;
if (iss >> val) {
// TODO: Handle a numeric value (in val)
continue;
}
iss.clear(); // Clear the error state
char ch;
if (!iss.get(ch)) break; // Break the loop if there is no more input
// TODO: Handle a character (in ch)
}
2
一種方法是使用scanf("%s")
,它將返回字符直到下一個空格。或者您可以使用getc
一次獲取一個字符。
編輯:
我從您正在使用獲取一整行讀取,在這種情況下的評論看,你可能會在循環中使用strtok打破行成令牌,然後看看會更好在每個令牌的第一個字符處決定如何處理它。
char line[MAX_LINE];
// read in the line
char * pTok = strtok(line, " \t");
while (pTok)
{
char ch = pTok[0];
if (isdigit(ch))
//handle number
if (ch == '+')
//handle addition operator
...
pTok = strtok(NULL, " \t");
}
0
我可能會通過抓取一整行做到這一點,然後有一個函數取一個字符串,偏移和返回結構。返回結構包含標記的開始和結束偏移量,標記類型(運算符,參數)以及其他可能的東西。
或者,將其分成兩個函數,一個用於檢查數字,另一個用於檢查運算符。
相關問題
- 1. 提取字符串特定的格式
- 2. 從字符串中的特定字符串模式中提取數字
- 3. 提取總是遵循特定字符串的信息
- 4. 從固定格式的字符串中提取數字
- 5. VB2010從數組字符串中提取特定字符
- 6. T-sql子字符串函數提取特定的字符串
- 7. 從sql中的字符串提取數字並執行計算
- 8. 從UTF-8格式字符串中提取雙字節字符/子字符串
- 9. 我如何計算字符串中特定字符的數量?
- 10. 計算字符串中的特定字符數
- 11. 計算字符串中特定字符的出現次數
- 12. 從具有特定格式的字符串中提取信息
- 13. R:如何從字符串中提取特定的數字?
- 14. 從字符串中提取特定值
- 15. 從字符串,它在特定的後綴
- 16. 特定字符串格式
- 17. 從字符串中提取所有出現的特定字符
- 18. jQuery從字符串中提取指定的子字符串和以下數字
- 19. 正則表達式從字符串中提取特定的子字符串
- 20. 使用轉義字符/特殊字符/格式計算字符串的長度
- 21. 計算字符串中的字符數
- 22. 從字符串獲取特定字符
- 23. 正則表達式:獲取特定字符串的字符不前和後串
- 24. 從另一字符串中提取字符串兩個特定字符
- 25. 如何從字符串中提取特定字符
- 26. 從字符串中提取特定的字符串模式(swift 2)
- 27. 從字符串中提取字符串
- 28. 如何從cpp中給定的字符串中提取特定的字符串?
- 29. 從字符串中提取特別匹配的子字符串
- 30. 計算字符串內特定字符的數量
這功課嗎?您的「需要使用獲取,然後轉換」的評論似乎表明了這一點。 – Vatine 2010-03-06 10:56:28
是的,我被困在這個階段。 – silent 2010-03-06 10:59:29
標記功課。 – Tronic 2010-03-06 11:06:11