首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在c#中标记字符串数组

在c#中标记字符串数组
EN

Stack Overflow用户
提问于 2018-11-12 20:49:40
回答 1查看 1.1K关注 0票数 0

我对编程很陌生,对我的生活来说,我无法解决这个问题。我正在尝试创建一个函数,该函数以空格作为分隔符和指向字符串的指针以及作为参数的标记数来标记字符串。该函数应该返回一个char数组,该数组带有已标记的字符串Ex。将"( 2+(5-3) )“转换为{ "(”、"2“、"+”、"(“、"5”、"-“、"3”、")“、")"}。我的代码如下:

代码语言:javascript
复制
char** get_tokens(char* str, int n_tokens)
{
  char *new;
  int i = 0;
  char ** new_arr = malloc(sizeof(char) * n_tokens);
  if(new_arr == NULL)
    return NULL;

  new = strtok(str, " ");
  while(new != NULL)
  {
    printf("%s\n", new);
    new = strtok(NULL, " ");
  }
  char** p;

  return p;
}

char** p行只是没有编译错误的填充代码。

我相信我已经正确地使用了strtok(),但是我遇到困难的部分是理解返回类型。我不确定如何利用char**返回,并有一个带有标记字符串的数组供以后使用。如果有人能帮助解释指向指针返回类型的指针,以及帮助我的代码做我想做的事情的方法,我们将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-12 20:56:21

char **可以指向char *数组,这是您想要返回的。

在循环中,您希望将strtok的返回值分配给new_arr指向的数组的元素。您还希望为大小为sizeof(char *)的元素分配空间,而不是为sizeof(char)分配空间。

代码语言:javascript
复制
  char ** new_arr = malloc(sizeof(char *) * n_tokens);
  if(new_arr == NULL)
    return NULL;

  new = strtok(str, " ");
  while(new != NULL)
  {
    printf("%s\n", new);
    new_arr[i++] = new;
    new = strtok(NULL, " ");
  }

  return new_arr;

这是在假设n_tokens的值是正确的情况下工作的。如果您不知道有多少令牌,仍然可以通过使用realloc展开数组的大小来做到这一点:

代码语言:javascript
复制
  char ** new_arr = malloc(sizeof(char *));
  if(new_arr == NULL)
    return NULL;

  new = strtok(str, " ");
  while(new != NULL)
  {
    printf("%s\n", new);
    new_arr[i++] = new;
    new_arr = realloc(new_arr, sizeof(char *) * (i + 1));
    if (new_arr == NULL) {
        return NULL;
    }
    new = strtok(NULL, " ");
  }

  return new_arr;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53269882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档