2024-11-05 06:20:52
#include <stdio.h>
#include<string.h>
struct st{
char a[15];
long b;
};
int main ()
{
struct st s[111];
long end[111];
char t[50][14],other[14]={'333'},son[50][14],gson[50][14];
char x[11];
int n;
scanf("%d",&n);
getchar();
for(int i=0;i<n;i++)
{
scanf("%s%ld",s[i].a,&s[i].b);
}
for(int i=0;i<n;i++)//排序
{
for(int j=0;j<n-1-i;j++)
{
if(strcmp(s[j].a,s[j+1].a)>0)
{
strcpy(x,s[j].a);
strcpy(s[j].a,s[j+1].a);
strcpy(s[j+1].a,x);
}
}
}
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
if(strcmp(s[i].a,s[j].a)==0&&s[i].b==s[j].b)
{
strcpy(s[i].a,other);//去名字和号码同时重复的
s[i].b=0;
}
}
}
int k=0;
for(int i=0;i<n;i++)
{
if(strcmp(s[i].a,other)!=0)
{
strcpy(t[k],s[i].a);
end[k]=s[i].b;
k++;
}
}
for(int i=0;i<k;i++)
{
strcpy(son[i],t[i]);
}
for(int i=0;i<k-1;i++)//在上面的基础上再去名字重复的;
{
for(int j=i+1;j<k;j++)
{
if(strcmp(son[i],son[j])==0)
{
strcpy(son[i],other);
}
}
}
int word=0;
for(int i=0;i<k;i++)
{
if(strcmp(son[i],other)!=0)
{
strcpy(gson[word],son[i]);
word++;
}
}
printf("\n");
int sum=0;
for(int i=0;i<word;i++)
{
sum=0;
for(int j=0;j<k;j++)
{
if(strcmp(gson[i],t[j])==0)
{
if(sum==0)
printf("%s %ld\n",gson[i],end[j]);
if(sum!=0)
printf("%s_%d %ld\n",gson[i],sum,end[j]);
sum++;
}
}
}
return 0;
}
2024-11-05 14:20:56
struct s *i2;和static struct s a[3]={1, &a[1],2,&a[2],3,&a[0]};static struct s *ptr;都是什么意思?而且i是几怎么知道,另外为什么a[1].i也就是2?
struct s *i2的意思是定义一个指针变量i2,这个变量的类型是结构体struct s类型的.
static struct s a[3]定义了一个静态结构体类型struct s数组.数组中有三个元素,值为{}中的值.
static struct s *ptr定义了一个静态的结构体struct s类型的指针.
程序中ptr指向的是a[1]的地址.*ptr就是a[1]中的值,a[1]的值由两部分组成,即a[1].i和a[1].*i2
用ptr表示为ptr->i和ptr->*i2.
a[0].i=1
a[0].*i2=&a[1]
a[1].i=2
a[1].*i2=&a[2]
2024-11-05 09:33:21
2024-11-05 01:22:36