FJNU.1762
Description
给定若干个double类型变量的声明语句,要求从中分离出变量名,并按是否有重定义,分成两部分,按字典序输出
Input
若干行double类型变量的声明语句(每行的字符数不超过128)
Output
首先按字典序输出未重定义的变量名,每行一个
其次按字典序输出产生重定义的变量名,每行除了输出变量名外,还要输出变量名在整个声明语句中出现的次数
Sample Input
double a,b,c,aa,ab=0,ac_a2; double A[256]={1,2,5},B[1024][1024]={0},*C;
double aa , Aa, _a; double aa,aa; double b;
double *ac;
Sample Output
A
Aa
B
C
_a
a
ab
ac
ac_a2
c
aa 4
b 2
Hint
在所有测试数据中,没有Simple Input中不包含的情况,
例如,不需要考虑double a=1.0+2.0*3此类情况
即分隔符集为 ,={}[]* .;
Source
Piao@FNOJ
My Program
#include
<
iostream
>
#include
<
string
>
#include
<
map
>
#include
<
algorithm
>
using
namespace
std;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
int
main()
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
map<string,int> var;
char str[130],*a;
int i,n;
bool flag;
while(scanf("%s",str)!=EOF)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
a=strtok(str,",={}[]* .;");
while(a)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
flag=false;
n=strlen(a);
for(i=0;i<n;i++)
if(a[i]<'0'||a[i]>'9')
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
flag=true;
break;
}
if(strcmp(a,"double")&&flag)
var[string(a)]++;
a=strtok(NULL,",={}[]* .;");
}
}
map<string,int>::iterator iter;
for(iter=var.begin();iter!=var.end();iter++)
if(iter->second==1)
cout<<iter->first<<endl;
for(iter=var.begin();iter!=var.end();iter++)
if(iter->second>1)
cout<<iter->first<<" "<<iter->second<<endl;
return 0;
}
YOYO's Note:
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄它是华丽的分隔线
【题意简述】
给定若干个double类型变量的声明语句,要求从中分离出变量名,并按是否有重定义,分成两部分,按字典序输出
【粗略分析】
可以用map记录该变量名访问的次数,
接着先将次数为1的输出,
然后将>1的输出,
map默认是按字典排序,增好~
【C++源代码】
#include
<
iostream
>
#include
<
string
>
#include
<
map
>
#include
<
algorithm
>
using
namespace
std;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
int
main()
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
map<string,int> var;
char str[130],*a;
int i,n;
bool flag;
while(scanf("%s",str)!=EOF)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
a=strtok(str,",={}[]* .;");
while(a)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
flag=false;
n=strlen(a);
for(i=0;i<n;i++)
if(a[i]<'0'||a[i]>'9')
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
flag=true;
break;
}
if(strcmp(a,"double")&&flag)
var[string(a)]++;
a=strtok(NULL,",={}[]* .;");
}
}
map<string,int>::iterator iter;
for(iter=var.begin();iter!=var.end();iter++)
if(iter->second==1)
cout<<iter->first<<endl;
for(iter=var.begin();iter!=var.end();iter++)
if(iter->second>1)
cout<<iter->first<<" "<<iter->second<<endl;
return 0;
}
【注意事项】
※ 他们说不要用gets要用scanf不然会WA~
※ double不是变量名~
【点评】
STL,STL,STL中的map练手题 = =//