北邮ACM2017练习赛A. Email Adress

题目

大概就是给一串字符,表示email地址,其中@用at表示,.用dot表示,当然了字母串里可能本来就有at和dot。
所以要想将给定的字符串恢复成尽可能短的email地址需要注意下面几条:

  1. 只能含有一个@,且不能在开头处,即除开头外遇到的第一个at转化成@,其余还是at
  2. 除开头和结尾的dot不能转化成.以外其余的全部转化成.

代码

#include <stdlib.h>
#include <stdio.h>
#include <iostream>
char arrin[10000];
FILE *fin;
int main(){
fin=fopen("in.txt","r");
char ch;
while(~fscanf(fin,"%c",&ch)){
int i =1;
bool atflag = false;
memset(arrin,0,10000);
//存入字符串
arrin[0]=ch;
while(fscanf(fin,"%c",&ch) && ch!='\n'){
arrin[i]=ch;
i++;
}
//arrin[i]=-1;
//计算输出
printf("%c",arrin[0]);
for(int j =1;j < i;j++){
if(arrin[j] == 'a' && arrin[j+1] == 't' && atflag == false){//第一次遇到at
printf("%c",'@');
atflag = true;
j+=1;
}
else if(arrin[j] == 'd' && arrin[j+1] == 'o' && arrin[j+2] == 't' && arrin[j+3] != '\0'){//dot不在结尾的情况
printf("%c",'.');
j+=2;
}
else{
printf("%c",arrin[j]);
}
}
printf("\n");
}
return 0;
}