愚人节的礼物

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.清空栈中括号,以便下次输入。
 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值