#include <cstdio>
#include<string.h>
#include<iostream>
#define students_num 10 //学生人数
#define name_num 10 //姓氏个数
#define name_len 20 //姓氏长度
//定义学生结构体
struct students
{
char name[20];
char hometown[10];
};
int main()
{
int i,j,z,k,l,n,num[students_num],count[students_num],count_name=0;;
struct students s[students_num]={
{"zhang san","baiyin"},{"zhang si","tianshui"},{"zhang wu","qingyang"},
{"wang san","jiuquan"},{"tang si","pingliang"},{"tang wu","dingxi"},
{"tang san","lanzhou"},{"li si","zhangye"},{"du wu","wuwei"},{"mao liu","linxia"}
//测试数据集
// {"zhang san","baiyin"},{"qing si","tianshui"},{"wang wu","qingyang"},
// {"ning san","jiuquan"},{"tang si","pingliang"},{"shi wu","dingxi"},
// {"huang san","lanzhou"},{"li si","zhangye"},{"du wu","wuwei"},{"mao liu","linxia"}
};
//便利数组并获取各姓氏长度
for(i=0;i<students_num;i++){
int lenth = 0;
int flag2 = 0;
count[i]=0;
for(j=0;j<name_len;j++){
if(s[i].name[j]!=' ')
lenth ++;
else{
num[i]=lenth;
break;
}
}
//统计姓氏次数
for(z=0;z<students_num;z++){
int flag1 = 1;
for(int y=0;y<=num[i]&&y<=num[z];y++){
if(s[i].name[y]!=s[z].name[y]){
flag1 = 0;
break;
}
}
if(flag1==1) count[i]++;
}
//输出时消除重复姓氏
for(k=0;k<i;k++){
for(l=0;l<=num[i]||l<=num[k];l++){
if(s[i].name[l]!=s[k].name[l]){
break;
}
flag2 = 1;
}
if(flag2==1) break;
}
//输出姓氏以及次数
if(flag2==0){
count_name +=1;
for(n=0;n<=num[i];n++){
printf("%c",s[i].name[n]);
}
printf("姓的学生一共有%d名!\n",count[i]);
}
}
printf("\n%d名学生中一共有%d种姓氏!",students_num,count_name);
}
记录第一次上课时老师要求写的代码,想了一整天改bug改到崩溃!