洛谷 P1957

发布时间 2023-12-21 22:05:08作者: 胖柚の工作室

题目链接:

在每一行,因为不确定第一个输入数据的类型,所以要用字符串输入。
值得注意的是,\(\sf sprintf\)的函数原型为
int sprintf(char *buffer, const char *format [, argument] … );,其第一个参数是char*类型,因此在使用\(\sf sprintf\)时一般使用字符串数组char str[]而不用\(\sf string\)

补充:const char* 转换成char*
有时我们需要把string类型的字符串转换成char*,但是string.c_str()等到的结果是const char*类型而不是char*类型,转换方法就是先把string转换成const char*,然后用sprintf把const char*转换成char*

示例:

string str;
char* strchar;
const char* strC = str.c_str();
sprintf(strchar,"%s",str.c_str());
#include <bits/stdc++.h>

using namespace std;

int main()
{
    int n, x, y;
    cin >> n;
    while (n--) {
        char s[6], p[100]; char k;
        cin >> s;
        if (isalpha(s[0])) {
            k = s[0];
            cin >> x >> y;
        }
        else {
            x = atoi(s);
            cin >> y;
        }
        if (k == 'a') sprintf(p, "%d+%d=%d", x, y, x + y);
        else if (k == 'b') sprintf(p, "%d-%d=%d", x, y, x - y);
        else sprintf(p, "%d*%d=%d", x, y, x * y);
        cout << p << "\n" << strlen(p) << "\n";
    }
    return 0;
}

x = atoi(s)可用sscanf(s, "%d", &x)替代。