.net上机第一题 - 简单的字符串运算

来源:互联网 发布:多人通话软件 编辑:程序博客网 时间:2024/05/22 12:14



其实这道题不难,但很多同学空着只写了个main(),让我感到很惊讶!

步骤:首先得定义一个去空格的函数,再有一个判断格式错误的函数,然后才是计算。
计算已经很简单,去掉了除(/)这种情况,而且将操作数定义为1~9的正整数。
难点:istringstream字符串输入流用法
刚开始想利用char转int来做,但发现时间复杂度会超时。使用istringstream可以解决这个问题,再定义两个vector分别存放操作数和符号


PS: zjut1034题很像,只是多了去除空格,和格式判断

链接:http://cpp.zjut.edu.cn/ShowProblem.aspx?ShowID=1034


附上源代码(C++):

#include <iostream>#include <fstream>#include <sstream>#include <string>#include <vector>using namespace std;string Space_Remove(string str){  // 去除空格string re_str;for(int i=0;i<str.length();i++){if(str[i] != ' '){re_str += str[i];}}return re_str;}bool Format_Check(string str){   // 检查输入格式bool flag = true;for(int i=0;i<str.length();i=i+2){if(str[i]<'1' || str[i]>'9'){flag = false;break;}}for(int i=1;i<str.length()-1;i=i+2){if(str[i]!='*' && str[i]!='-' && str[i]!='+' && str[i]!='/'){flag = false;break;}}return flag;}void main(){string str;while(getline(cin,str)){str = Space_Remove(str);cout<<str<<endl;if(!Format_Check(str)){cout<<"#\n";}else {istringstream sin(str);   // 定义一个istringstream(字符串输入流)对象sin,并将str的值存储在sin中vector<int> num;vector<char> sign;char ch;int a;sin>>a;  // 字符串的读取,只读取整数,遇到符号停止读取num.push_back(a);while(sin>>ch>>a){  // 先计算"*" 和 "/"if(ch=='*'){num.back() *= a;}else if(ch=='/'){if(a!=0){num.back() /= a;}   // 因为a取1~9,所以被除数为0不用考虑else {cout<<"error!\n";exit(0);}}else {num.push_back(a);sign.push_back(ch);}}int sum = num[0];for(int i=0;i<sign.size();i++){   // 后计算"+" 和 "-"if(sign[i]=='+'){sum += num[i+1]; }else {sum -= num[i+1];}}cout<<sum<<endl;}}}


0 0
原创粉丝点击