在C中不使用strtok拆分char数组

问题描述

每当有空空间时,我都希望在char中拆分一个数组。

例如,如果给定的char chars [] =“ Test Me”。

返回值应为:

测试

#include <stdio.h>
#include "strtok.h"

static char *next = NulL;

char *custom_strtok(char *str)
{
        next = custom_strtok(",.-");
        while(next != NulL) {
            printf ("%s\n",next);
            next = custom_strtok(",.-");
        }
        return NulL;
}

如何在不使用strtok的情况下用空格分割char数组?

解决方法

您将浏览C标准库中C <string.h>头文件提供的功能列表,并且会发现很多选项。

我写了一些有趣的东西:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct token {
  const char *str;
  size_t len;
};

struct token next_token(const char *str,const char *sep) {
  struct token tok;
  /* skip leading separator characters */
  str += strspn(str,sep);
  tok.str = str;
  tok.len = strcspn(str,sep);
  return tok;
}

struct token *get_tokens(const char *str,const char *sep) {
  size_t len = 0,cap = 8;
  struct token *arr = malloc(cap * sizeof *arr);

  for (struct token tok = next_token(str,sep); tok.len;
       tok = next_token(tok.str + tok.len,sep)) {
    arr[len] = tok;
    ++len;
    if (len == cap) {
      cap *= 2;
      arr = realloc(arr,cap * sizeof *arr);
    }
  }
  arr[len].str = NULL;
  arr[len].len = 0;
  return arr;
}

int main(int argc,char *argv[]) {
  if (argc < 2)
    exit(EXIT_FAILURE);

  puts("Token array");
  struct token *token_arr = get_tokens(argv[1]," \t\n");
  for (size_t i = 0; token_arr[i].str; ++i) {
    printf("\"%.*s\" ",(int)token_arr[i].len,token_arr[i].str);
  }
  putchar('\n');
  free(token_arr);

  puts("Next token loop");
  for (struct token tok = next_token(argv[1]," \t\n"); tok.len;
       tok = next_token(tok.str + tok.len," \t\n")) {
    printf("\"%.*s\" ",(int)tok.len,tok.str);
  }
  putchar('\n');
  return EXIT_SUCCESS;
}

解锁查看全部内容

付费后查看完整内容
限时 微信扫码支付 ¥9.9 19.9

编程问答相关问答

在 CSS 中设置 cellpadding 和 cellspacing?
如何在 Java 中创建内存泄漏?
浮点数被破坏了吗?
按字符串属性值对对象数组进行排序
如何加快Android模拟器的速度?
如何舍入至多 2 位小数?
使用 Git 版本控制查看文件的更改历史记录
如何在 JavaScript 中检查空/未定义/空字符串?
微信公众号搜索 “ 程序精选 ” ,选择关注!
微信公众号搜 "程序精选"关注