【问题标题】:Store words in char array C language用char数组C语言存储单词
【发布时间】:2017-06-04 18:09:49
【问题描述】:

我有这个代码:

char *pch;
pch = strtok(texto," ");

while (pch != NULL)
{
  pch = strtok (NULL, " ");
}

我的“texto”变量类似于“这是我的文本示例”。

而且我需要将来自 pch 的每个值存储在一个字符数组中,但我真的不知道该怎么做。

我需要这样的东西,数组中的每个值都会有一个单词,所以:

“这是我的文本示例”。

Array[0][20] = This;

Array[1][20] = is;

Array[2][20] = my;

Array[3][20] = text;

Array[4][20] = example;

pch in 虽然所有这些单词都已拆分,但我不知道如何添加到 char 数组中,或者我也将如何声明他。

【问题讨论】:

  • 通过使用strcpy - 在while 循环的开始,在下一次调用strtok 之前。怎么申报他? char Array[MAXWORDS][MAXWORDLEN+1];
  • strcpy(Array[i++], pch);
  • 但是这个 Array[i++],我怎么能用我需要的 exat 大小来声明呢?
  • 点赞this
  • 对于一个简单的二维数组,所有字存储的最大长度相同。存储长度可变的情况,比较复杂,以后再说吧。

标签: c arrays split


【解决方案1】:

考虑以下示例:

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

#define MAXSTRLEN 20
#define MAXWORD 6

int main(void)
{
    char arr[MAXWORD][MAXSTRLEN+1] = {0};
    char str[] ="This is my text example";
    char *pch;
    int i = 0;
    pch = strtok (str," ");
    while (pch != NULL && i < MAXWORD)
    {
        strncpy(arr[i++], pch, MAXSTRLEN);
        pch = strtok (NULL, " ");
    }
    return 0;
}

【讨论】:

  • 推荐while (pch != NULL) --> while (i &lt; 6 &amp;&amp; pch != NULL)
  • @BLUEPIXY 是的,好建议 - 添加 MAXWORD 以定义令牌数量。
  • 我一直很喜欢 for (pch=strtok(str," "); i &lt; MAXWORD &amp;&amp; pch; pch=strtok(NULL, " \n")) strncpy(arr[i++], pch, MAXSTRLEN); 两者都可以,使用 for 您可以在循环的一个表达式中处理初始调用和所有后续调用。
【解决方案2】:

这应该可以。使用strcpypch 复制到字符数组中。

char str[] ="This is my text example";
char *pch;
int i = 0;
pch = strtok (str," ");
char a[10][20];
while (pch != NULL)
{   
  strcpy(a[i++], pch);
  pch = strtok (NULL, " ");
}

正如@stackptr 建议的那样,不要使用strtok,而是使用strtok_rFor more info 这个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-22
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 2013-02-23
    • 2016-01-24
    • 1970-01-01
    相关资源
    最近更新 更多