跳转至

输入输出和格式化

牛客输入输出练习

多组 A+B EOF 形式

多组_A+B_EOF形式

给定若干组测试数据,读取至文件末尾为止。每组数据有两个整数 \(a\) 和 \(b\) ,请你求出 \(a+b\) 的值。

  • 输入

    1 2
    114 514
    2024 727
    
  • 输出

    3
    628
    2751
    
int a, b;
while (cin >> a >> b) { // 注意 while 处理多个 case
    cout << a + b << endl;
}

多组带空格的字符串 T 组形式

多组_带空格的字符串_T组形式

给定 \(t\) 组询问,每次给出一个长度为 \(n\) 的带空格的字符串 \(s\) ,请你去掉空格之后,将其倒置,然后输出。

  • 输入

    3
    9
    one space
    11
    two  spaces
    14
    three   spaces
    
  • 输出

    ecapseno
    secapsowt
    secapseerht
    
int t;
cin >> t;
for (int i = 0; i < t; i++) {
    int n;
    cin >> n;
    cin.ignore(); // 一定要先吃掉上一个换行
    string s;
    getline(cin, s);
    s.erase(std::remove(s.begin(), s.end(), ' '), s.end());
    reverse(s.begin(), s.end());
    cout << s << endl;
}

格式化输出

  • 保留 \(3\) 位小数输出,如果小数位数不够则补零,否则四舍五入:printf("%.3lf", x)
  • 保留正整数的 \(9\) 个数位,如果数位小于 \(9\) 个,则补充前导零:printf("%09d", x)
  • C语言printf指定宽度的格式化输出 - 知乎

其他

  • 字符串转数字:std::stoi, std::stol, std::stoll - cppreference.com
  • 流可以转换成 bool,如果出错了(比如 EOF),结果就是 false,所以可以用 while (cin >> a >> b) 一直读到 EOF
  • cin.getline 接收的是 char* 类型的 buffer,不能和另外一个 std::getline 混淆
  • 可以用 cin.get() 读取一个字符,返回值类型是 int,可能是 EOF
  • cin.ignore,第一个参数指定忽略的字符数量,默认是 1;第二个参数指定结束符,默认是 EOF,这个结束符也会被忽略