//添加一个新的博主 void add_blogger(char *name, char *group_names, char *group_fans) { strcpy(bloggers[blogger_count].name, name); //复制姓名 bloggers[blogger_count].fans = 0; //初始化粉丝数为0 bloggers[blogger_count].group_count = 0; //初始化粉丝群数量为0 char *token1 = strtok(group_names, ","); //使用逗号分隔粉丝群名字 char *token2 = strtok(group_fans, ","); //使用逗号分隔粉丝群人数 while (token1 != NULL && token2 != NULL) { //循环读取每个粉丝群名字和人数,并添加到groups数组中 strcpy(bloggers[blogger_count].groups[bloggers[blogger_count].group_count].name, token1); //复制粉丝群名字 bloggers[blogger_count].groups[bloggers[blogger_count].group_count].fans = atoi(token2); //转换并赋值粉丝群人数 bloggers[blogger_count].groups[bloggers[blogger_count].group_count].head = NULL; //初始化第一个粉丝指针为NULL bloggers[blogger_count].fans = bloggers[blogger_count].fans+atoi(token2); //累加该博主的粉丝数 bloggers[blogger_count].group_count++; //增加该博主的粉丝群数量 token1 = strtok(NULL, ","); //继续读取下一个粉丝群名字 token2 = strtok(NULL, ","); //继续读取下一个粉丝群人数 } blogger_count++; //增加博主数量 }优化该函数
时间: 2024-04-09 11:28:29 浏览: 122
优化该函数的一种方法是使用字符串分割函数`strsep`代替`strtok`,因为`strtok`在多线程环境下可能会导致不可预期的结果。另外,可以避免重复计算博主的粉丝数和粉丝群数量。
以下是优化后的代码:
```c
void add_blogger(char *name, char *group_names, char *group_fans) {
strcpy(bloggers[blogger_count].name, name); //复制姓名
bloggers[blogger_count].fans = 0; //初始化粉丝数为0
bloggers[blogger_count].group_count = 0; //初始化粉丝群数量为0
char *group_name = strdup(group_names); //复制粉丝群名字的副本
char *group_fan = strdup(group_fans); //复制粉丝群人数的副本
char *token1 = strsep(&group_name, ","); //使用逗号分隔粉丝群名字
char *token2 = strsep(&group_fan, ","); //使用逗号分隔粉丝群人数
while (token1 != NULL && token2 != NULL) { //循环读取每个粉丝群名字和人数,并添加到groups数组中
strcpy(bloggers[blogger_count].groups[bloggers[blogger_count].group_count].name, token1); //复制粉丝群名字
bloggers[blogger_count].groups[bloggers[blogger_count].group_count].fans = atoi(token2); //转换并赋值粉丝群人数
bloggers[blogger_count].groups[bloggers[blogger_count].group_count].head = NULL; //初始化第一个粉丝指针为NULL
bloggers[blogger_count].fans += atoi(token2); //累加该博主的粉丝数
bloggers[blogger_count].group_count++; //增加该博主的粉丝群数量
token1 = strsep(&group_name, ","); //继续读取下一个粉丝群名字
token2 = strsep(&group_fan, ","); //继续读取下一个粉丝群人数
}
free(group_name); //释放内存
free(group_fan); //释放内存
blogger_count++; //增加博主数量
}
```
这样做可以避免多线程环境下可能出现的问题,并且更加简洁和安全。
阅读全文