hihoCoder1603

#1603 : 提取用户名

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

在现在的各种互联网应用中,在一段文字中使用'@'字符来提起一名用户是流行的做法。  

例如:

"@littleho submitted his code 30 times before he got passed the system test."  

其中littleho就是一个用户名。我们规定在一段文字中,'@'字符之后一段连续的、非空的大小写英文字母组成的字符串被视为提起的用户名。  

给定一段文字,请你输出其中所有提到的用户名。

输入

一行文本,只包含大小写字母、标点符号和空格。长度不超过800。

输出

按文本中的顺序输出所有提到的用户名,之间用一个空格隔开。重复提到的相同用户名也重复输出。

样例输入
@abc:@@,@littleho's code is so confusing. @abc.
样例输出
abc littleho abc

再加几组数据:
Input:
@....gfjhsf@  @nmn
@,, @m
@m
@ASD@S@S@@@EEEE@.J

Output:
nmn
m
ASD S S EEEE

分析:直接模拟输出就好。

#include<cstdio>
char s[100000],sub[1000];
int main()
{
    gets(s);
    int len=0,i=0,flag=0,t=0;
    while(s[i])
    {
        if(s[i]=='@') 
        {
            if(flag&&len>0)
            {sub[len]='';if(t++) printf(" ");printf("%s",sub);len=0;}
            else
            {len=0;flag=1;}
            i++;continue;
        }
        if(flag)
        {
            if((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z'))
            {sub[len++]=s[i];}
            else if(len>0)
            {
                sub[len]='';
                if(t) printf(" ");
                printf("%s",sub);
                t++;
                len=0;flag=0;
            }
            else {len=0;flag=0;}
        }
        else {len=0;flag=0;}
        i++;
    }
    if(flag&&len>0) 
    {
        sub[len]='';
        if(t++) printf(" ");
        printf("%s",sub);
    }
    if(t) printf("
");
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/ACRykl/p/8306126.html