题解 P1580 【yyy loves Easter_Egg I】
officeyutong
2018-11-08 09:27:53
这么多题解都没有用scanf格式化输入做的吗qwq...
这道题用scanf格式化输入做起来非常简单啊..
输入最关键在于这行代码:
```cpp
sscanf(buff,"yyy loves %[^: ] :%*[^@] @yyy loves %s%*s",name,at);
```
```plain
yyy loves %[^: ] :%*[^@] @yyy loves %s%*s
```
这个格式化字符串的含义是,先读入yyy loves 这几个字符,然后一直读,读到冒号或者空格为止(如果读到了冒号或者空格会扔回输入流),并且把到这里读到的字符串放到第一个变量里,然后再读一个冒号,然后再接着读入,一直读到@为止,并且到at为止的字符串直接扔掉(加了一个*),然后读@yyy loves %s,然后再读入一个字符串,并全部扔掉。
sscanf返回读入元素的数目。
可一个根据读入元素的数目来判断有没有@
举例:
```plain
yyy loves [name] : before_at @yyy loves [target] after_at
[name]会被放到字符数组name中,[target]会被放到字符数组at中,其他读入的内容全部扔掉
```
```plain
yyy loves [name] : nothing
[name]会被读入到name中,而at不会有任何改动。
```
```cpp
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <map>
#include <string>
#include <cstring>
#include <inttypes.h>
typedef int int_t;
using std::cin;
using std::endl;
using std::cout;
char buff[1 << 10];
int main(){
int_t index = 1;
int_t len = 0;
std::string curr = "";
do{
cin.getline(buff,sizeof(buff));
// cout<<"input "<<buff<<endl;
if(strlen(buff) == 0) break;
if(buff[0] == '\n' || buff[0] == '\r') break;
int_t atcount = 0;
for(char* ptr = buff;*ptr != '\0';ptr ++) atcount += *ptr == '@';
char name[1 << 10],at[1 << 10];
int count = sscanf(buff,"yyy loves %[^: ] :%*[^@] @yyy loves %s%*s",name,at);
// cout <<"name = '"<< name <<"' at = '"<<at <<"' count = "<< count <<" curr = '"<<curr<<"'" << endl;
if(atcount >= 2){
printf("Unsuccessful @yyy loves %s attempt\n%d\nyyy loves %s",curr.c_str(),len + 1,name);
return 0;
}
if(curr == name){
printf("Successful @yyy loves %s attempt",curr.c_str());
return 0;
}
if(count == 1){
if(curr == "") continue;
printf("Unsuccessful @yyy loves %s attempt\n%d\nyyy loves %s",curr.c_str(),len + 1,name);
return 0;
}else{
if(curr == ""){
len = 1;
curr = at;
}else if(at == curr){
len += 1;
continue;
}else{
printf("Unsuccessful @yyy loves %s attempt\n%d\nyyy loves %s",curr.c_str(),len + 1,name);
return 0;
}
}
index += 1;
}while(strlen(buff) != 0);
printf("Unsuccessful @yyy loves %s attempt\n%d\nGood Queue Shape",curr.c_str(),len);
return 0;
}
```