Problem Description
四月一日快到了,Vayko想了個愚人的好辦法——送禮物。嘿嘿,不要想的太好,這禮物可沒那麼簡單,Vayko為了愚人,準備了一堆盒子,其中有一個盒子裡面裝了禮物。盒子裡面可以再放零個或者多個盒子。假設放禮物的盒子裡不再放其他盒子。
用()表示一個盒子,B表示禮物,Vayko想讓你幫她算出愚人指數,即最少需要拆多少個盒子才能拿到禮物。
Input
本題目包含多組測試,請處理到檔案結束。
每組測試包含一個長度不大于1000,隻包含'(',')'和'B'三種字元的字元串,代表Vayko設計的禮物透視圖。
你可以假設,每個透視圖畫的都是合法的。
Output
對于每組測試,請在一行裡面輸出愚人指數。
Sample Input
((((B)()))())
(B)
Sample Output
4
1
<<<源代碼>>>
#include<stdio.h>
#include<string.h>
#include<stack>
using namespace std;
int main(){
char str[1000];
stack<char>s;
while(scanf("%s",str)==1){
int len=strlen(str);
for(int i=0;i<len;i++){
if(str[i]=='(') s.push(str[i]);
if(str[i]==')'&&s.top()=='(') s.pop();
if(str[i]=='B') {
printf("%d\n",s.size());
break;
}
}
while(!s.empty())
s.pop();
}
}
1.需要輸入一串資料(字元串)時,可以用字元串數組來存放它們。
#include<string.h> char str[100];scanf("%s",str);
str[i] i同時可作為輸入字元的計數器
用strlen(str)來表示輸入字元個數
2.關于字元串
1>.字元串變量的聲明與初始化
C語言允許以下兩種方式初始化:(不能把初始化從聲明中分隔出來)
char city[9]="New York"; char city[9]={'N','e','w',' ','Y','o','r','k'};
2>.使用scanf函數從終端讀取字元串
一般格式為:char str[size];
scanf("%s",str);
這種讀取方法的問題是,一旦遇到空白符(包括空格、制表格、回車符、樣式縮進和換行符),就停止輸入。
是以如果在終端輸入如下的文本行:NEW YORK,則隻有字元串NEW讀入數組str中。
如果要讀取整行的字元"NEW YORK",就要使用兩個大小适合的字元數組。
如:char in[10],out[10];
scanf("%s%s",in,out);
printf("%s %s\n",in,out);
3>.字元串處理函數(puts,gets,strcat,strcpy and strncpy,strcmp,strlen,strlwr,strupr)
①puts函數
一般形式為:puts(字元數組)
作用是:将一個字元串(以'\0'結束的字元序列),輸出到終端。
如:char str[]={"I Love China\n"};
puts(str);
②gets函數
一般形式為:gets(字元數組)
作用是:從終端輸入一個字元串到字元數組,并且得到一個函數值。該函數值是字元數組的起始位址。
如:char str[100];
puts(str);
輸入I Love China 輸出I Love China
△注意用puts和gets函數隻能輸出或輸入一個字元串,不能寫成puts(str1,str2)或gets(str1,str2)
#include<string.h>
③strcat函數
一般形式為:strcat(字元數組1,字元數組2)
作用是:連接配接兩個字元數組中的字元串,把字元串2連接配接到字元串1的後面,
結果放在字元數組1中,函數調用後得到一個函數值,即字元數組1的位址。
連接配接前兩個字元串的後面都有'\0',連接配接時将字元串後面的'\0'取消,隻在新串後保留'\0'。
如:char str1[]={"What I got to do to make you love me. "};
char str2[]={"Sorry seems to be the hardest word"};
printf("%s",strcat(str1,str2));
輸出What I got to do to make you love me.Sorry seems to be the hardest word
④strcmp函數
一般形式為:strcmp(字元串1,字元串2)
作用是:比較字元串1和字元串2。
⑤strlen函數
一般形式為:strlen(字元數組)
作用是:測試字元串長度的函數。函數的值為字元串中的實際長度,不包括'\0'。
如:char str[10]={"China"};
printf("%d",strlen(str));
輸出的結果不是10,也不是6,而是5
⑥strlwr函數和strupr函數
一般形式為:strlwr(字元串);
作用是:将字元串中的大寫字母轉換成小寫字母。
strupr函數與strlwr函數正好相反,它是把字元串中的小寫字母轉換成大寫字母。
3.做這道題隻是簡單的運用一下,<stack>函數
解題思想:利用棧除去其中的空盒子,剩下的就是從最外層直接到禮物的層數。
1.當讀到左括号時,入棧;标記該盒子非空;
2.當讀到右括号時,判斷棧頂元素是不是左括号,如果是說明這是一個空盒,棧頂元素彈出;
3.當讀到"B"時,統計棧中左括号的個數,即可得到答案;并結束整個循環。
4.清空棧中括号,以便下次輸入。