二、簡單計算器
一、括號匹配問題
1、題目和要求
時間限制:1s,記憶體限制:32mb,特殊判題:否
2、總結
//修改前,計算輸入字串長度
intstringlength
(char
* c)
else}}
//修改後,計算輸入字串長度
intstringlength
(char
* c)
else
}return i;
}
3)由於系統通過判斷是否遇到』\0』,來決定是否終止字串輸出;因此,當陣列預留空間大於需要輸出的陣列長度時,在輸出字串的末尾一定要加上output_string[strlen(input_string)] = '\0'
作為結束符,否則還會繼續輸出一些未知的東西。
怎樣的char陣列,系統會自動在結尾加上』\0』呢?
1.當以字串形式在**中為陣列賦值時,系統會自動為』\0』開乙個儲存空間。
2.字串長度不包括』\0』。
3、思路
主要思路:輸入字串後,從後往前遍歷。遇到右括號入棧;遇到左括號根據中間棧中的內容進行下一步操作,如果棧為空則不匹配,如果棧頂為右括號則出棧。當輸入字串遍歷結束後,若棧中還剩餘則不匹配。
4、**
#include
#include
#include
using
namespace std;
#define n 100
//)(rttyy())sss)(
//儲存括號和位置資訊
class
bracket
;void
set(
int p,
char v)
;int
getpos()
char
getvalue()
};intmain()
else
}break
;default
: output_string[i]
=' ';}
}while
(!s.
empty()
) output_string[
strlen
(input_string)]=
'\0'
;printf
("%s\n"
,input_string)
;printf
("%s\n"
,output_string)
;return0;
}
二、簡單計算器
1、題目和要求
時間限制:1s,記憶體限制:32mb,特殊判題:否
2、總結
1)using namespace std
和.h
兩種方式的區別。選自:標頭檔案加.h和不加,h區別,以及using namespace std。
.h
是c語言中使用的,當使用.h
時,相當於在c中呼叫庫函式,使用的是全域性命名空間。
c++ 標準程式庫中的所有識別符號都被定義於乙個名為std的namespace中,因此使用前要宣告命名空間。using namespace std
是c++中宣告命名空間的一種方式。
2)stdio
和iostream
兩種標準輸入輸出庫的區別。
stdio
屬於c語言,輸入輸出為printf(),scanf()。
iostream
屬於c++,輸入輸出為cout<>…。
3)c++中字串的儲存和讀取方式。c++儲存字串的方法( 讀取字串、char 陣列、string 型別)
在下面的**中,沒有指定getline()
函式的結束符,輸入ctrl+z
即可結束。
4)c語言中保留小數點後兩位數:printf("%.2lf",a);
c++中保留小數點後兩位數:cout << fixed <5)注意:
3、思路
1)設兩個堆疊,乙個運算子棧,乙個數字棧。
2)從左至右依次遍歷字串。若遍歷到運算子,入運算子棧;若遍歷到數字,則開始拼接數字,完成**數字棧。
3)開始計算。
1>若運算子棧棧頂運算子為 × 、/,則彈出棧頂運算子,再從數字棧中依次彈出兩個棧頂數字,完成運算後,將結果壓入數字棧。
2>若運算子棧棧頂運算子為 + 、- 且棧頂下乙個運算子為 × 、/,則彈出棧頂運算子和棧頂數字,儲存。然後,彈出當前棧頂運算子,再從數字棧中依次彈出兩個棧頂數字,完成運算後,將結果壓入數字棧。最後,把剛剛儲存的運算子和數字壓棧。
4)若運算子棧為空,則運算結束,此時數字棧中唯一的數字即為表示式的值,顯示後,彈出,為下一輪運算清空棧。
4、**
#include
#include
#include
#include
using
namespace std;
#define n 200
stack<
char
> op;
//運算子棧
stack<
double
> num;
//運算元棧
double a,b;
//兩個運算元
double
add(
)double
jianfa()
double
mul(
)double
div(
)int
main()
//從字串開頭開始遍歷,入運算元棧和運算子棧
for(
int i=
0; i
length()
;)else
if(c<=
'9'&&c>=
'0')
num.
push
(value)
; value =0;
}else
}while
(!op.
empty()
)else
else
if(t==
'*')
else
if(t==
'/')
}break
;case
'-':
if(op.
empty()
)else
else
if(t==
'*')
else
if(t==
'/')
}break
;case
'*':
num.
push
(mul()
);break
;case
'/':
num.
push
(div()
);break;}
}if(!num.
empty()
)}return0;
}
棧的應用 括號匹配問題
typedef struct stack stack,pstack 單向鏈式儲存結構 void pushstack pstack stack,char str 左括號入棧 bool popstack pstack stack,char str 左括號出棧 非常簡單的出入棧操作 這裡就說下進棧操作不用...
括號匹配問題 棧的應用
pragma once ifndef stack h define stack h define datatype char define max size 20 typedef struct stack stack 初始化棧 void stackinit stack s 壓棧 void stack...
括號匹配問題(棧的應用)
時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 現在,有一行括號序列,請你檢查這行括號是否配對。輸入第一行輸入乙個數n 0輸出 每組輸入資料的輸出佔一行,如果該字串中所含的括號是配對的,則輸出yes,如果不配對則輸出no 樣例輸入 3 樣例輸出 no noyes 先了解一下棧...