我第一遍看见题目的想法:
- 解决输入问题(是两个数据还是带运算符的三个数据)
- 按行输入字符串
- 截取字符串子串并保存成整数
- 将数据和答案拼接到一个字符串中并输出
- 输出字符串的长度
因为考虑的比较复杂加上使用了getline(看题解听说Linux不喜欢getline),第一次就RE了
看了题解学习如下函数:
-
isalnum() 如果参数是字母数字,即字母或数字,该函数返回true
-
isalpha() 如果参数是字母,该函数返回true
-
isblank() 如果参数是空格或水平制表符,该函数返回true
-
iscntrl() 如果参数是控制字符,该函数返回true
-
isdigit() 如果参数是数字(0~9),该函数返回true
-
isgraph() 如果参数是除空格之外的打印字符,该函数返回true
-
islower() 如果参数是小写字母,该函数返回true
-
isprint() 如果参数是打印字符(包括空格),该函数返回true
-
ispunct() 如果参数是标点符号,该函数返回true
-
isspace() 如果参数是标准空白字符,如空格、进纸、换行符、回车、水平制表符或者垂直制表符,该函数返回true
-
isupper() 如果参数是大写字母,该函数返回true
-
isxdigit() 如果参数是十六进制的数字,即0~9、af、AF,该函数返回true
-
tolower() 如果参数是大写字符,则返回其小写,否则返回该参数
-
toupper() 如果参数是小写字母,则返回其大写,否则返回该参数
-
tolower()——toupper() 大写转为小写——小写转为大写
-
isupper()——islower() 判断是否为大写——判断是否为小写,若是返回true,否则返回该参数
-
isalnum()——isalpha() 判断是否为字母或数字,若是返回true,否则返回该参数——判断是否为字母,若是大写字母返回1,若是小写字母返回2,若不是字母返回0
-
atoi ((表示 ascii to integer)是把字符串转换成整型数的一个函数)
sscanf ():将字符数组中的内容读入其他地方
参数:((字符数组名,字符数组也就是数据的来源), %?(希望存储的数据的格式), &变量名(数据最终存放的变量))
sprintf ():将其他数据读入目标字符数组中去
参数: ( (字符数组名,就是最终村储数据的字符数组),“%?…”(字符串里面的格式), 变量名(和“”里面的格式相对应))
参考:菜鸟教程
stringstream 将字符串转成数字:
stringstream ss;
string s;
int a;
cin >> s;
ss << s;
ss >> a;
cout << a-1;
// 1234
// 1233
将数字转成字符串:
stringstream ss;
string s;
int a;
cin >> a;
a++;
ss << a;
ss >> s;
cout << s;
// 1234
// 1235
#include<bits/stdc++.h>
using namespace std;
#define _for(n,m,i) for (int i = (n); i < (m); ++i)
#define _rep(n,m,i) for (int i = (n); i <= (m); ++i)
#define _srep(n,m,i)for (int i = (n); i >= (m); i--)
#define _sfor(n,m,i)for (int i = (n); i > (m); i--)
string s;
int n;
long long a, b;
char c;
char ans[100];
//stringstream ss;
int main() {
cin >> n;
_for(0, n, i) {
cin >> s;
if(isalpha(s[0])){
c = s[0];
cin >> a >> b;
}
else {
stringstream ss;
ss << s;
ss >> a;
cin >> b;
}
if(c == 'a') sprintf(ans, "%d+%d=%d", a, b, a+b);
if(c == 'b') sprintf(ans, "%d-%d=%d", a, b, a-b);
if(c == 'c') sprintf(ans, "%d*%d=%d", a, b, a*b);
printf("%s\n%d\n", ans, strlen(ans));
}
return 0;
}
需要注意的一个小细节:如果将stringstream 声明成全局变量的话那么转换的数字有时候会出现一些小问题。(目前还不知道原因)
所以要每次转换的时候重新声明这个变量