#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
int n;
int i,j;
char s[100],b;//s存放最终的字符串,方便用strlen计算长度
//a存放临时字符串
char a[10];
int c=0,d=0;
cin>>n; //输入次数
for(i=0;i<n;i++)
{
cin>>a; //输入第一个字符,下面的if判断是字符还是数字
//如果是字符就要把字符存入另一个数组里,因为临时字符串随时都会更新数据
//字符存入另一个数组,方便后面判断进行什么样的计算
if(a[0]>='a'&&a[0]<='z')
{
b=a[0];
// cout<<b<<endl;
cin>>c>>d;
}
else
{
sscanf(a,"%d",&c); //如果输入的不是字母,就要通过sscanf函数转换为int型
cin>>d;
}
memset(s,0,sizeof(s)); //初始化数组
if(b=='a')
{
sprintf(s,"%d+%d=%d",c,d,c+d); //需要注意的是sprintf函数不是一个输出的函数
//它只是将数据转换形式存入一个字符串中
}else if(b=='b')
{
sprintf(s,"%d-%d=%d",c,d,c-d);
}else if(b=='c')
{
sprintf(s,"%d*%d=%d",c,d,c*d);
}
cout<<s<<endl<<strlen(s)<<endl;
}
return 0;
}
知识点概要:
具体内容详见链接:(9条消息) C 字符串函数 sprintf()、snprintf() 详解_love、reading的博客-CSDN博客_sprintf取一个字符串几个字符d
sprintf函数的打印位置不是命令框,而是函数里所指向的字符串中,例如上述代码里的
sprintf(s,"%d+%d=%d",c,d,c+d);
它执行的操作就是将int型变量c,d以及c+d等数字以char型写入字符串s,这里值得注意的是第一个参数只能是char型的数组,具体原因我还不明白,可能是因为这是c中的函数,所以用string型是不可以的。
sscanf函数也可以和scanf对比着理解,例如scanf是直接从键盘读取数据,而sscanf是从字符串读取数据,它和sprintf的出发点是一样的。例如上述代码中的一句:
sscanf(a,"%d",&c);
它执行的操作是将char型字符串a中的a[0]以”%d“(int型)读入c中 (请结合源代码分析,a是定义的临时数组a[10],c是定义的需要处理的int型变量)
需要注意的是,这里的a也需要是char型数组。