题解 P1580 【yyy loves Easter_Egg I】

officeyutong

2018-11-08 09:27:53

Solution

这么多题解都没有用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; } ```