1.之所以用到结构体,是因为一个物体有多个属性,此时使用结构体简单些
2.对字符串进行整体操作时,需要添加头文件#include<string.h>
1).字符串赋值需要使用strcpy( char * dst, const char * src )函数,即把后者的值赋予前者
2).字符串比较需要使用int strcmp(char *str1,char * str2)函数,相等返回0,前者大返回1,后者大返回-1
下面是笔者认为比较经典的题(根据结构体中一个数的大小来给结构体排序)
有四个候选人zhao,qian,sun,wang参加评选,编写计票程序,统计每个人的得票数量,按得票从多到少的顺序显示每个人的名字和得票数。
输入:若干行、若干列的合理人名,人名间用空格隔开,最后是000表示结束。
输出:四行,每行是一个人的名字和得票数,中间用一个空格隔开。
【输入输出样例】
输入:
zhao qian sun wang wang wang wang
sun sun qian 000
输出:
wang 4
sun 3
qian 2
zhao 1
#include<stdio.h>
#include<string.h>
typedef struct person
{
char arr[6];
int num;
}Person;
int main()
{
//结构体中含有字符串和整数的结构体的赋值
Person Arr[4];
strcpy(Arr[0].arr,"wang");
strcpy(Arr[1].arr,"sun");
strcpy(Arr[2].arr,"qian");
strcpy(Arr[3].arr,"zhao");
for(int i=0;i<=3;i++)
{
Arr[i].num=0;
}
// 输入多个以空格为分界的字符串(用scanf),并进行字符串的比较
char input[10];
scanf("%s",input);
while (strcmp(input, "000") != 0) {
if (strcmp(input, "wang") == 0)
{
Arr[0].num++;
}
if (strcmp(input, "sun") == 0)
{
Arr[1].num++;
}
if (strcmp(input, "qian") == 0)
{
Arr[2].num++;
}
if (strcmp(input, "zhao") == 0)
{
Arr[3].num++;
}
scanf("%s",input);
}
// 结构体按照num进行排序
for(int i=0;i<4;i++)
{
for(int j=0;j<4-i-1;j++)
{
if(Arr[j].num<Arr[j+1].num)
{
char temp[10];
strcpy(temp,Arr[j].arr);
int t=Arr[j].num;
Arr[j].num=Arr[j+1].num;
Arr[j+1].num=t;
strcpy(Arr[j].arr,Arr[j+1].arr);
strcpy(Arr[j+1].arr,temp);
}
}
}
//输出
for(int i=0;i<=3;i++)
{
printf("%s %d\n",Arr[i].arr,Arr[i].num);
}
return 0;
}