【九度oj】1019简单计算器
来源:互联网 发布:淘宝十大男模特 编辑:程序博客网 时间:2024/04/30 07:30
字符串的题目一直做不好,一些知识点掌握不熟练。在1019的坑里绕了一天,终于AC!
整理一下关于字符串的点~~(持续更新)
一、输入问题
1,最简单的一种:事先输入n,规定了用例组数;输入字符串中间没有空格或者空格是可预知的。这时对字符串通常用字符数组char [],操作比string类型方便:
int n; cin >> n; while(n--){ char str[N] = " "; //最好初始化,否则循环时可能对以后的数据有影响,不知道为什么 cin >> str; }
比如九度1013,开门人关门人,输入为
EE301218 08:05:35 20:56:352,输入多组字符串,输入字符串中间有空格,直到遇到规定结尾。这时不能用字符数组char [],只能用string 和getline:
string str; while(getline(cin, str)){ if(str == "规定结尾") break; }比如1019,简单计算器,输入为
1 + 24 + 2 * 5 - 7 / 110
3,其他,不是正常情况,只列出代码和运行结果:
int main(){ char str[N]; while(scanf(" %s", str) != EOF){ cout << str; } return 0;}
结果:
输入:12 34 hhh aaa, b
输出:1234hhhaaa,b
二、字符数组char []常用方法
1,长度 strlen(str)
三、字符串string常用方法
1,长度 str.size()或str.length()
四、vector<type>常用方法
1,添加到末尾str.push_back()
2,弹出末尾元素str.pop_back()
3,清空str.clear()
五、字符和数字转化(整型或浮点型)
字符转数字
1,单个数字:str[i] - '0'
2,字符串(参数为const char *,不能是string哦):atoi(str)(头文件<stdlib.h>)
数字转字符
3,snprintf(str, "%d", 123)
六、切分,以空格或其他字符(可以多个)切分字符串,并加入vector<string>
#include <cstdio>#include <cstring>#include <vector>#include <iostream>#define N 100using namespace std;int main(){ string str; char str0[N]; vector<string> ans; getline(cin, str); for(int i = 0; i < str.size(); i++){ str0[i] = str[i]; } char *sep = " "; //如果以多个符号切分,直接加入即可,如",+" char *p; p = strtok(str0, sep); //char * strtok(char *s, const char *delim) while(p){ ans.push_back(p); p = strtok(NULL, sep);//strtok固定用法,第一次p = strtok(str0, sep);第二次 p = strtok(NULL, sep); } for(int i = 0; i < ans.size(); i++){ cout << "ans[" << i << "] = " << ans[i] << endl; } return 0;}
结果:
输入:abc de 123
输出:
ans[0] = abc
ans[1] = de
ans[2] = 123
最后,贴一下1019的题目和自己的做法,已AC,欢迎批评指正~
- 题目描述:
- 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
- 输入:
- 测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
- 输出:
- 对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
- 样例输入:
1 + 24 + 2 * 5 - 7 / 110
- 样例输出:
3.0013.36
#include <cstdio>#include <iostream>#include <cstring>#include <vector>#include <stdlib.h>#define N 201using namespace std; main(){ string str; while(getline(cin, str)){ if(str == "0") break; char str0[N] = " "; for(int i = 0; i < str.size(); i++){ //将string转移到char[]中 str0[i] = str[i]; } vector<double> num; //num中存放数字 vector<char> sf; //sf中存放+、-号, * 和 / 在遍历时就直接计算出来 double ans; double a, b; char *sep = " "; //以空格切分字符串,同时计算乘除 char *p; p = strtok(str0, sep); while(p){ if(p[0] == '+' || p[0] == '-'){ sf.push_back(p[0]); }else if(strcmp(p, "*") == 0){ a = num[num.size() - 1]; num.pop_back(); p = strtok(NULL, sep); num.push_back(a * atof(p)); }else if(strcmp(p, "/") == 0){ a = num[num.size() - 1]; num.pop_back(); p = strtok(NULL, sep); num.push_back(a / atof(p)); }else{ num.push_back(atof(p)); } p = strtok(NULL, sep); } ans = num[0]; int k = 0; for(int i = 1; i < num.size(); i++){ //再遍历num和sf,此时只要顺序计算加减法 if(sf[k] == '+'){ ans = ans + num[i]; }else if(sf[k] == '-'){ ans = ans - num[i]; } k++; } printf("%.2f\n", ans); } return 0;}
0 0
- 九度OJ 1019 简单计算器
- 九度oj 题目1019:简单计算器
- 九度oj-1019:简单计算器
- 九度OJ-题目1019:简单计算器
- 九度oj-1019-简单计算器
- 九度OJ 1019:简单计算器
- 九度OJ-1019-简单计算器
- 九度OJ 题目1019:简单计算器
- 九度OJ-1019简单计算器
- <九度 OJ>题目1019:简单计算器
- 九度OJ 题目1019:简单计算器
- 九度OJ 1019 简单计算器
- 【九度oj】1019简单计算器
- 九度 OJ 题目1019:简单计算器
- 九度OJ-题目1019 简单计算器
- 九度OJ题目1019:简单计算器
- 题目1019:简单计算器 九度OJ
- 九度OJ—题目1019:简单计算器
- stm32的寄存器的概念
- POJ - 1321 棋盘问题
- Java内存模型(十二)
- wikioi 1245最小N个和
- Xilinx zynq zc702学习总结
- 【九度oj】1019简单计算器
- HDU6011 Lotus and Characters
- C#不登录电脑启动程序_0
- DbUtils之更新(广义)和批处理操作
- spring boot 学习番外篇:超快速项目初始化
- opencv学习笔记(2)----矩阵运算
- C++ 头文件系列(vector)
- いろいろ知りたくてやりましょう
- 【c++】运算符重载