九度 1101 - 字符串处理 - 计算表达式

根据我的通过来看,首先这道题里面没有小数,如果存在除不尽的情况,也是按取整来算。

本题建立了两个栈,一个存储数字的数字栈,一个存储加减乘除的符号栈。在处理字符串的时候,每次找到一个数字时,放进一个string的临时变量里,因为会存在十位以上的情况;每次找到一个符号时,首先将string变量转int放入数字栈,然后检查符号栈的栈顶符号是否为乘或者除,如果是就从符号栈弹出顶,从数字栈弹出两个数,计算后放回数字栈。这样到处理完字符串时,我们的符号栈内只剩下加和减了。此时不断弹出符号与数字进行计算,直至符号栈为空。此时数字栈的栈顶就是答案。

#include<iostream>
#include<stack>
#include<string>
#include <stdlib.h>
using namespace std;
string data;
string str="";
int main(){

	while(cin>>data){
		data+='#'; //为了处理到最后一个数字时,仍能继续处理,我们加一个#作为字符串结尾。
		stack<int>n;
		stack<char>f;
		for(int i=0;data[i];i++){
			if(data[i]<='9'&&data[i]>='0'){
				str+=data[i];
			}
			else{
				n.push(atoi(str.c_str()));str="";
				if(!f.empty()){
					char tmp=f.top();
					if(tmp=='*'){
						f.pop();
						int a=n.top();n.pop();
						int b=n.top();n.pop();
						n.push(a*b);
					}
					else if(tmp=='/'){
						f.pop();
						int a=n.top();n.pop();
						int b=n.top();n.pop();
						n.push(b/a);
					}
				}
				if(data[i]!='#')f.push(data[i]);
			}
		}
		while(!f.empty()){
			char tmp=f.top();
			if(tmp=='+'){
					f.pop();
					int a=n.top();n.pop();
					int b=n.top();n.pop();
					n.push(a+b);
			}
			else if(tmp=='-'){
					f.pop();
					int a=n.top();n.pop();
					int b=n.top();n.pop();
					n.push(b-a);
			}
		}
		cout<<n.top()<<endl;
	}
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 10:03:49

九度 1101 - 字符串处理 - 计算表达式的相关文章

九度 1101

对于Javascript的认识是来自于2011年夏天去实训基地做的一个网页项目,当时认为JavaScript是不是Java的一个派别语言什么的,老师那时候教我们调用了一些Javascript的方法.当时对这个语言的最初的印象就是会调用方法大致能懂就行了,没有深究.直到今年年初去面试几家企业,问我会不会使用Javascript,我说就调调几个方法就好了~   当时瞬间就直到无地自容了.于是将这本JavaScript的电子书看了下,写下相关的读书札记,也希望能让和我有着对Javascript误解的人

九度[1101]计算表达式

1 # include<cstdio> 2 # include<iostream> 3 # include<cstring> 4 using namespace std; 5 struct node{ 6 int value; 7 int next; 8 }a[500]; 9 char c[100]; 10 int main(){ 11 char s[500]; 12 while(scanf("%s",s)!=EOF){ 13 int l=strle

九度 1369 字符串的排列

package com.wangzhu.njupt; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.IOException; import java.io.StreamTokenizer; import java.util.Arrays; /** * 还有重复的字符数组的全排列 * * @ClassName: Main1369 * @Description: TODO * @a

题目1101:计算表达式(栈的使用)

题目链接:http://ac.jobdu.com/problem.php?pid=1101 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: // // 1101 计算表达式.cpp // Jobdu // // Created by PengFei_Zheng on 06/05/2017. // Copyright © 2017 PengFei_Zheng. All rights reserved. // #include <stdi

题目1101 :计算表达式 (运算符操作)方法比较简洁

题目1101:计算表达式 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5469 解决:1703 题目描述: 对于一个不存在括号的表达式进行计算 输入: 存在多种数据,每组数据一行,表达式不存在空格 输出: 输出结果 样例输入: 6/2+3+3*4 样例输出: 18 #include <iostream> #include<stdio.h> using namespace std; //6/2+3+3*4 int main() { char ch; int i,temp

九度1535 重叠的最长字串 字符串哈希

题目描述: 给定两个字符串,求它们前后重叠的最长子串的长度,比如"abcde"和"cdefg"是"cde",长度为3. 输入: 输入可能包含多个测试案例. 对于每个测试案例只有一行, 包含两个字符串.字符串长度不超过1000000,仅包含字符'a'-'z'. 输出: 对应每个测试案例,输出它们前后重叠的最长子串的长度. 样例输入: abcde cdefg 样例输出: 3 #include <iostream> #include <

字符串计算表达式

string str="4+4+2.1"; 要的效果: double sum=4+4+2.1: 方案一: 动态计算表达式: 1 public class Expression 2 { 3 object instance; 4 MethodInfo method; 5 /// <summary> 6 /// 表达试运算 7 /// </summary> 8 /// <param name="expression">表达试</p

九度OJ小结

1. 高精度问题 可参考题目 题目1137:浮点数加法   http://ac.jobdu.com/problem.php?pid=1137 对于高精度问题可以考虑使用结构体.上述为浮点数加法,因此该结构体可以具有保存小数部分以及整数部分的成员变量,使用数组进行保存.于此同时还要记录下所保存数据的长度,因此还应当有两个int变量,保存整数部分长度和保存小数部分长度. 在C++中对运算符进行重载操作. 运算符函数定义的一般格如下所示: <返回类型说明符> operator <运算符符号&g

九度机试 题目1165:字符串匹配 2008年北京航空航天大学计算机研究生机试真题

题目1165:字符串匹配 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2497 解决:858 题目描述: 读入数据string[ ],然后读入一个短字符串.要求查找string[ ]中和短字符串的所有匹配,输出行号.匹配字符串.匹配时不区分大小写,并且可以有一个用中括号表示的模式匹配.如"aa[123]bb",就是说aa1bb.aa2bb.aa3bb都算匹配. 输入: 输入有多组数据. 每组数据第一行输入n(1<=n<=1000),从第二行开始输入n个字符串(