0%

C.Ducky Debugging

C. Ducky Debugging

题目描述:

数据范围:

题解:

是一个交互题。关键在于怎么读取一整行字符串。

  • getslinux 中没有这个函数,需要使用 fgets 替代

    1
    2
    3
    4
    #include <stdio.h>
    char str[maxn];
    char *gets(char *str);
    gets(str);
  • fgets() ,也是读取一行,可以指定输入流

    1
    2
    3
    4
    # include <stdio.h>
    char str[maxn];
    char *fgets(char *__restrict__ __s, int __n, FILE *__restrict__ __stream)
    fgets(str, 100, stdin); // 需要指定读取个数
  • cin.getline() 读取换行符并将换行符替换成 \0 ,并且不会主动丢弃换行符,仍将换行符留在输入队列中,因此会出现超时情况。

    1
    2
    3
    4
    5
    6
    std::basic_istream<char, std::char_traits<char>>::__istream_type & getline(char *__s, std::streamsize __n)

    std::basic_istream<char, std::char_traits<char>>::__istream_type & getline(char *__s, std::streamsize __n, char __delim)
    char str[maxn];
    cin.get(str, 100);
    cin.get(str, 100, '\n');
  • getline() 读取换行符,并且将换行符替换成 \0 ,并且丢弃换行符,输入队列里面没有该换行符了

    1
    2
    3
    // 重载太多了,一般用法:
    string s;
    getline(cin, s);

总结,一般用 gets, fgets, getline 别用 cin.getline

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
using namespace std;
using namespace FAST_IO;
const ll mod = 1e9 + 7;
const int INF = 0x3f3f3f3f;
const ll INF_LL = 0x3f3f3f3f3f3f3f3f;
const double eps = 1e-5;
const int maxn = 1e2 + 10;
const int maxm = 1e5 + 10;
int t, n, m, k;
string s;
string tar = "I quacked the code!";
int main()
{
// #define COMP_DATA
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
#endif
while (true)
{
getline(cin, s);

int len = s.length();
if (s[len - 1] == '.')
{
cout << "*Nod*" << endl;
}
else if (s[len - 1] == '?')
{
cout << "Quack!" << endl;
}
else if (s == tar)
{
break;
}
}
return 0;
}