<cf>Sysadmin Bob
AC code:
#include <cstdio> #include <queue> #include <iostream> using namespace std; int main() { char s[202]; char c; // int cnt1=0,cnt2=0;//cnt1、cnt2分别记录字母和@的个数 queue <int> pos;//记录出现@处的下标 bool OK=1;//判断是否能还原 int len,i,j; for(len=0,i=0;scanf("%c",&c)!=EOF;len++) {//cout<<1; if(c=='\n' || c=='\r') { s[len]='\0'; break; } else if(c=='@') { //两个@间距不足两位,注意要在pos不为空时才执行。 if(!pos.empty() && len-pos.back()<3) {//cout<<"*"; OK=0; while(scanf("%c",&c) && !(c=='\n' || c=='\r')){} break; } s[len]=c; pos.push(len); } else { s[len]=c; //cnt1++; } } if(OK) { //如果不存在@ or 不存在字母 or 首字符是@ or 末字符是@ if(pos.empty() || !(len-pos.size()) || s[len-1]=='@' || s[0]=='@') { OK=0; } else for(i=0;s[i]!='\0';) { if(pos.size()>1) { for(;i<pos.front()+2;i++) cout<<s[i]; cout<<","; pos.pop(); } else { for(;s[i]!='\0';i++) cout<<s[i]; cout<<endl; } } } if(!OK) cout<<"No solution"<<endl; return 0; }