C中带有分隔符的拆分字符串

C中带有分隔符的拆分字符串

如何编写函数来拆分和返回C编程语言中带有分隔符的字符串的数组?

char* str = "JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC";str_split(str,',');



墨色风雨
浏览 810回答 3
3回答

qq_遁去的一_1

我认为strsep仍然是最好的工具:while ((token = strsep(&str, ","))) my_fn(token);从字面上说,这是一条分隔字符串的行。额外的括号是一个样式元素,表示我们有意测试赋值的结果,而不是相等操作符。==.为了让这种模式发挥作用,token和str两者都有类型char *..如果以字符串文字开头,那么首先要复制它:// More general pattern:const char *my_str_literal = "JAN,FEB,MAR";char *token, *str, *tofree;tofree = str = strdup(my_str_literal);   // We own str's memory now.while ((token = strsep(&str, ","))) my_fn(token);free(tofree);如果两个分隔符同时出现在str,你会得到一个token值,这是空字符串。价值str被修改,因为遇到的每个分隔符都被一个零字节覆盖-这是复制首先解析的字符串的另一个很好的理由。在评论中,有人建议strtok比strsep因为strtok更便于携带。Ubuntu和MacOSXstrsep这是安全的猜测,其他单一系统也是如此。窗缺strsep,但它有strbrk使这短暂而甜蜜的strsep替换:char *strsep(char **stringp, const char *delim) {   if (*stringp == NULL) { return NULL; }   char *token_start = *stringp;   *stringp = strpbrk(token_start, delim);   if (*stringp) {     **stringp = '\0';     (*stringp)++;   }   return token_start;}这里是一个很好的解释strsepVSstrtok..利弊可能是主观判断的,不过,我认为这是一个很好的迹象strsep被设计为strtok.

开心每一天1111

字符串标记器-这段代码应该将您带到正确的方向。int main(void) {   char st[] ="Where there is will, there is a way.";   char *ch;   ch = strtok(st, " ");   while (ch != NULL) {   printf("%s\n", ch);   ch = strtok(NULL, " ,");   }   getch();   return 0;}
打开App,查看更多内容
随时随地看视频慕课网APP