C语言:字符串的拆分

 

 1 #include <io_utils.h>
 2 #include <string.h>
 3 #include <stdlib.h>
 4 
 5 int main() {
 6   char string[] = "C, 1972; C++, 1983; Java, 1995; Rust, 2010; Kotlin, 2011";
 7 
 8   typedef struct {
 9     char *name;
10     int year;
11   } Language;
12 
13   const char *language_break = ";";
14   const char *field_break = ",";
15 
16   int language_capacity = 3;
17   int language_size = 0;
18 
19   Language *languages = malloc(sizeof(Language) * language_capacity);
20   if (!languages) {
21     abort();
22   }
23 
24   char *next = strtok(string, field_break);
25   while (next) {
26     Language language;
27     language.name = next;
28 
29     next = strtok(NULL, language_break);
30     if (next) {
31       language.year = atoi(next);
32 
33       if(language_size + 1 >= language_capacity) {
34         language_capacity *= 2;
35         languages = realloc(languages, sizeof(Language) * language_capacity);
36         if (!languages) {
37           abort();
38         }
39       }
40 
41       languages[language_size++] = language;
42 
43       next = strtok(NULL, field_break);
44     }
45   }
46 
47   PRINTLNF("languages: %d", language_size);
48   PRINTLNF("languages capacity: %d", language_capacity);
49 
50   for (int i = 0; i < language_size; ++i) {
51     PRINTLNF("Language[name=%s, year=%d]", languages[i].name, languages[i].year);
52   }
53 
54   free(languages);
55 
56   return 0;
57 }
View Code

 

posted @ 2023-02-11 21:46  泥古拉斯赵四  阅读(70)  评论(0编辑  收藏  举报