当前位置:   article > 正文

结构体的应用2020-11-12_struct student tmp是什么意思

struct student tmp是什么意思
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #define NUM 4
  5. struct student
  6. {
  7. char *name;
  8. int age;
  9. char author[10];
  10. };
  11. void initcls(struct student *p, char *s)
  12. {//用字符串内容初始化结构体内存
  13. int i = 0;
  14. char *t = strtok(s, ",;");
  15. printf("%s\n", t);
  16. while(t != NULL)
  17. {
  18. p[i].name = malloc(strlen(t)+1);//+1存'\0'
  19. strcpy(p[i].name, t);//name是一个指针,分配内存把name储存在t
  20. t = strtok(NULL, ",;");
  21. p[i].age = atoi(t);//字符串转换成整形的一个函数
  22. t = strtok(NULL, ",;");
  23. strcpy(p[i].author, t);
  24. t = strtok(NULL, ",;");
  25. i++;
  26. }
  27. }
  28. /*int cmpname(struct student *s1,struct student *s2)
  29. {
  30. return s1->name - s2->name;
  31. }
  32. int cmpage(struct student *s1,struct student *s2)
  33. {
  34. return s1->age - s2->age;
  35. }
  36. int cmpscore(struct student *s1,struct student *s2)
  37. {
  38. return s1->author - s2->author;
  39. }
  40. void sortcls(struct student *p, int (*fp)(struct student *,struct student *))
  41. {//排序
  42. int i, j;
  43. for(i = 0; i < NUM-1; i++)
  44. {
  45. for(j = 0; j < NUM-i-1; j++)
  46. {
  47. if(fp(p+j,p+j+1)>0)
  48. {
  49. struct student tmp = p[j];
  50. p[j] = p[j+1];
  51. p[j+1] = tmp;
  52. }
  53. }
  54. }
  55. }
  56. */void sortcls(struct student *p)
  57. {//排序
  58. int i, j;
  59. for(i = 0; i < NUM-1; i++)
  60. {
  61. for(j = 0; j < NUM-i-1; j++)
  62. {
  63. if(strcmp(p[j].author, p[j+1].author) > 0)
  64. // if(p[j].age > p[j+1].age)
  65. // if(strcmp(p[j].name, p[j+1].name)>0)
  66. {
  67. struct student tmp = p[j];
  68. p[j] = p[j+1];
  69. p[j+1] = tmp;
  70. }
  71. }
  72. }
  73. }
  74. void showcls(struct student *p)
  75. {
  76. int i;
  77. for(i = 0; i < NUM; i++)
  78. {
  79. printf("name %s age %d score %s\n", (*(p+i)).name, p[i].age,(p+i)->author);
  80. }
  81. }
  82. void destory(struct student *p)
  83. {//free(name)
  84. int i;
  85. for(i = 0;i < NUM; i++)
  86. {
  87. free(p[i].name);
  88. p[i].name = NULL;
  89. }
  90. }
  91. int main()
  92. {
  93. char data[] = {"zhangsan,20,AAA; lisi,21,FFF; wangtao,18,BBB; jack,22,CCC"};
  94. struct student cls[NUM];
  95. initcls(cls, data); //初始化结构内存
  96. // sortcls(cls, cmpname); //排序
  97. // sortcls(cls, cmpage); //排序
  98. // sortcls(cls, cmpsauthor); //排序
  99. sortcls(cls); //排序
  100. showcls(cls); //输出
  101. destory(cls); //释放name
  102. }
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #define NUM 4
  5. struct student
  6. {
  7. char *name;
  8. int age;
  9. char author[10];
  10. };
  11. void initcls(struct student *p, char **s)
  12. {//用字符串内容初始化结构体内存
  13. int i = 0, j = 0;
  14. char arr[100];
  15. while(j < NUM)
  16. {
  17. strcpy(arr, s[j]);
  18. char *t = strtok(arr, ";");
  19. while(t != NULL)
  20. {
  21. p[i].name = malloc(strlen(t)+1);//+1存'\0'
  22. strcpy(p[i].name, t);//name是一个指针,分配内存把name储存在t
  23. t = strtok(NULL, ";");
  24. p[i].age = atoi(t);//字符串转换成整形的一个函数
  25. t = strtok(NULL, ";");
  26. strcpy(p[i].author, t);
  27. t = strtok(NULL, ";");
  28. i++;
  29. }
  30. j++;
  31. }
  32. }
  33. int cmpname(struct student *s1,struct student *s2)
  34. {
  35. return s1->name - s2->name;
  36. }
  37. int cmpage(struct student *s1,struct student *s2)
  38. {
  39. return s1->age - s2->age;
  40. }
  41. int cmpscore(struct student *s1,struct student *s2)
  42. {
  43. return s1->author - s2->author;
  44. }
  45. void sortcls(struct student *p, int (*fp)(struct student *,struct student *))
  46. {//排序
  47. int i, j;
  48. for(i = 0; i < NUM-1; i++)
  49. {
  50. for(j = 0; j < NUM-i-1; j++)
  51. {
  52. if(fp(p+j,p+j+1)>0)
  53. {
  54. struct student tmp = p[j];
  55. p[j] = p[j+1];
  56. p[j+1] = tmp;
  57. }
  58. }
  59. }
  60. }
  61. /*void sortcls(struct student *p)
  62. {//排序
  63. int i, j;
  64. for(i = 0; i < NUM-1; i++)
  65. {
  66. for(j = 0; j < NUM-i-1; j++)
  67. {
  68. if(strcmp(p[j].author, p[j+1].author) > 0)
  69. // if(p[j].age > p[j+1].age)
  70. // if(strcmp(p[j].name, p[j+1].name)>0)
  71. {
  72. struct student tmp = p[j];
  73. p[j] = p[j+1];
  74. p[j+1] = tmp;
  75. }
  76. }
  77. }
  78. }*/
  79. void showcls(struct student *p)
  80. {
  81. int i;
  82. for(i = 0; i < NUM; i++)
  83. {
  84. printf("name=%s age=%d author=%s\n", p[i].name, p[i].age, p[i].author);
  85. printf("===========\n");
  86. }
  87. }
  88. void free1(struct student *p)
  89. {//free(name)
  90. int i;
  91. for(i = 0;i < NUM; i++)
  92. {
  93. free(p[i].name);
  94. p[i].name = NULL;
  95. }
  96. }
  97. int main()
  98. {
  99. char *data[] = {"zhangsan; 20; AAA", "lisi; 21; FFF" ,"wangtao; 18; BBB", "jack; 22; CCC"};
  100. struct student cls[NUM];
  101. initcls(cls, data); //初始化结构内存
  102. // sortcls(cls, cmpname); //排序
  103. sortcls(cls, cmpage); //排序
  104. // sortcls(cls, cmpsauthor); //排序
  105. // sortcls(cls); //排序
  106. showcls(cls); //输出
  107. free1(cls); //释放name
  108. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/143055
推荐阅读
相关标签
  

闽ICP备14008679号