P1957 口算练习题
分析
这道题乍一看好像很复杂,但其实主要难点只在于处理读入的字符串。
我们不妨先忽略处理的详细过程,分别以函数
点击查看代码
char cf[100]; int kd, i, a, b, c; void a1(), a2(), a3(); int main() { scanf("%d\n", &i); for (int j=0; j<i; j++) { fgets(cf, sizeof(cf), stdin); switch (cf[0]) { case 'a': kd=1; a1(); break; case 'b': kd=2; a2(); break; case 'c': kd=3; a3(); break; default: if (kd==1) a1(); if (kd==2) a2(); if (kd==3) a3(); break; } } return 0; }
这里使用fgets()读入一行字符串,通过switch语句判断字符串开头的字母并分别处理。为了使未输入字母时也能正确处理,引入了变量
接下来就是处理字符串了。
处理字符串需要用到<cstring>库中的两个函数:
ssacnf() //从字符串中读入信息,类似scanf() sprintf() //向字符串中输出信息,类似printf()
如果输入的字符串都是数字,可以使用sscanf()函数从字符串中读入数字:
sscanf(cf, "%d%d", &a, &b);
当字符串中有字母时,就要将字母变为”空“,这样scanf()读入时就会自动忽略。
得到了数字,就方便求得算式了。但题目又要求输出算式长度。这时可以利用sprintf()函数将算式输入到字符串中,再用strcpy()得到长度
对于加法,代码如下:
void a1() {//加法处理函数 if (cf[0]=='a') cf[0]=' '; sscanf(cf, "%d%d", &a, &b); sprintf(cf, "%d+%d=%d", a, b, a+b); printf("%s\n%d\n", cf, strlen(cf)); }
代码
#include <iostream> #include <cstring> char cf[100]; int kd, i, a, b, c; void a1(), a2(), a3(); int main() { scanf("%d\n", &i); for (int j=0; j<i; j++) { fgets(cf, sizeof(cf), stdin); switch (cf[0]) { case 'a': kd=1; a1(); break; case 'b': kd=2; a2(); break; case 'c': kd=3; a3(); break; default: if (kd==1) a1(); if (kd==2) a2(); if (kd==3) a3(); break; } } return 0; } void a1() { if (cf[0]=='a') cf[0]=' '; sscanf(cf, "%d%d", &a, &b); sprintf(cf, "%d+%d=%d", a, b, a+b); printf("%s\n%d\n", cf, strlen(cf)); } void a2() { if (cf[0]=='b') cf[0]=' '; sscanf(cf, "%d%d", &a, &b); sprintf(cf, "%d-%d=%d", a, b, a-b); printf("%s\n%d\n", cf, strlen(cf)); } void a3() { if (cf[0]=='c') cf[0]=' '; sscanf(cf, "%d%d", &a, &b); sprintf(cf, "%d*%d=%d", a, b, a*b); printf("%s\n%d\n", cf, strlen(cf)); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理