PTA 团队天梯赛║L1-035 情人节

一、题目要求

img

以上是朋友圈中一奇葩贴:“2 月 14 情人节了,我决定造福大家。第 2 个赞和第 14 个赞的,我介绍你俩认识…………咱三吃饭…你俩请…”。现给出此贴下点赞的朋友名单,请你找出那两位要请客的倒霉蛋。

输入格式:

输入按照点赞的先后顺序给出不知道多少个点赞的人名,每个人名占一行,为不超过 10 个英文字母的非空单词,以回车结束。一个英文句点.标志输入的结束,这个符号不算在点赞名单里。

输出格式:

根据点赞情况在一行中输出结论:若存在第 2 个人 A 和第 14 个人 B,则输出“A and B are inviting you to dinner…”;若只有 A 没有 B,则输出“A is the only one for you…”;若连 A 都没有,则输出“Momo… No one is for you …”。

输入样例 1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
GaoXZh
Magi
Einst
Quark
LaoLao
FatMouse
ZhaShen
fantacy
latesum
SenSen
QuanQuan
whatever
whenever
Potaty
hahaha
.

输出样例 1:

1
Magi and Potaty are inviting you to dinner...

输入样例 2:

1
2
3
4
LaoLao
FatMouse
whoever
.

输出样例 2:

1
FatMouse is the only one for you...

输入样例 3:

1
2
LaoLao
.

输出样例 3:

1
Momo... No one is for you ...

二、解题思路

用 while 语句输入字符串,知道判断输入的字符串第一个字符为 ‘.’ 时,break 跳出循环,初始化两个空字符串,在循环中如果有第二和第十四个输入的字符串,就将其分别赋值给这两个空字符串,最后在循环外判断两字符串是否为空,分情况输出结果。

三、代码

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
#include <bits/stdc++.h>
using namespace std;

int main()
{
string s;
string s1=" ", s2=" ";
int count = 0;
while(cin>>s)
{
if(s[0]=='.') break;
count++;
if(count == 2) s1 = s;
if(count == 14) s2 = s;
}
if(s1 != " ")
{
if(s2 != " ")
printf("%s and %s are inviting you to dinner...\n",s1.c_str(),s2.c_str());
else
printf("%s is the only one for you...\n",s1.c_str());
}
else
printf("Momo... No one is for you ...\n");

return 0;
}

四、反思总结

printf() 输出字符串时,s 为 string 类型

语法

  • const char *c_str();
  • c_str() 函数返回一个指向正规 C 字符串的指针, 内容与本 string 串相同.
  • 为了与 C 兼容,在 C 中没有 string 类型,故必须通过 string 类对象的成员函数 c_str() 把 string 对象转换成 C 中的字符串样式。

需要 s.c_str() 才可以正确输出。