学习c++字符串相关函数(cctpye里面的还有sprintf,sscanf),以及字符串数字转换

一道适合了解字符串相关函数用法的简单题目

在这里插入图片描述
我第一遍看见题目的想法:

  • 解决输入问题(是两个数据还是带运算符的三个数据)
  • 按行输入字符串
  • 截取字符串子串并保存成整数
  • 将数据和答案拼接到一个字符串中并输出
  • 输出字符串的长度

因为考虑的比较复杂加上使用了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 声明成全局变量的话那么转换的数字有时候会出现一些小问题。(目前还不知道原因)
所以要每次转换的时候重新声明这个变量

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值