Arrays 在C语言中,如何将字符串分成若干部分并存储到数组中?

Arrays 在C语言中,如何将字符串分成若干部分并存储到数组中?,arrays,c,loops,file,Arrays,C,Loops,File,我有一个文本文件,列出了一些杂货和有关它们的信息。看起来像这样: Round_Steak 1kg 17.38 18.50 Chicken 1kg 7.21 7.50 Apples 1kg 4.25 4.03 Carrots 1kg 2.3 2.27 char *line; // type of the element char separator // type of the element char **tab = my_str_to_word_array(line, separator);

我有一个文本文件,列出了一些杂货和有关它们的信息。看起来像这样:

Round_Steak 1kg 17.38 18.50
Chicken 1kg 7.21 7.50
Apples 1kg 4.25 4.03
Carrots 1kg 2.3 2.27
char *line; // type of the element
char separator // type of the element
char **tab = my_str_to_word_array(line, separator);
以下是我使用的代码,允许我引用每一行:

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

#define Llimit 100
#define Rlimit 10 

int main()
{
    //Array Line gets each line from the file by setting a limit for them and printing based on that limit.
    char line[Rlimit][Llimit];
    FILE *fp = NULL; 
    int n = 0;
    int i = 0;

    fp = fopen("food.txt", "r");
    while(fgets(line[n], Llimit, fp)) 
    {
        line[n][strlen(line[n]) - 1] = '\0';
        n++;
    }
    
    printf("%s", line[1]);
    
    fclose(fp);
    return 0;
}
#包括
#包括
#定义Llimit 100
#定义Rlimit 10
int main()
{
//数组行通过为文件中的每一行设置限制并基于该限制进行打印来获取每一行。
字符行[Rlimit][Llimit];
FILE*fp=NULL;
int n=0;
int i=0;
fp=fopen(“food.txt”、“r”);
while(fgets(第[n]行、第Llimit行、第fp行))
{
行[n][strlen(行[n])-1]='\0';
n++;
}
printf(“%s”,第[1]行);
fclose(fp);
返回0;
}
例如,如果我打印第[1]行,我将得到“鸡1kg 7.21 7.50”。但是,我需要做的是将每个字符串分离为各自的部分。因此,如果我调用类似于第[1][0]行的东西,结果只会得到“Chicken”。我曾尝试在一些for循环和其他类似的东西中使用strtok(行[I],“”),但我真的很困惑如何将它应用到这段代码中。

您可以编写一个函数(str\u to\u word\u数组) 这是我的str_to_word_数组函数 它需要一个字符串和一个分隔符(“对于您的情况”),您必须将结果存储在char**中,如下所示:

Round_Steak 1kg 17.38 18.50
Chicken 1kg 7.21 7.50
Apples 1kg 4.25 4.03
Carrots 1kg 2.3 2.27
char *line; // type of the element
char separator // type of the element
char **tab = my_str_to_word_array(line, separator);
已解决:

在卜拉希米·哈龙的帮助下,我做了一个单独的功能来单独执行任务,效果非常好。我想在这里分享一下:

char **get_column_item(char *lines, int column)
{
    int i = 0;
    char *p = strtok(lines, " ");
    char *array[4];

    while (p != NULL)
    {
        array[i++] = p;
        p = strtok(NULL, " ");
    }

    printf("%s\n", array[column]);

    return array[column];
}

现在,使用我的原始代码,如果调用get_column_item(第[1]行),则为0;它将返回该行中的第一项,因此它将返回“Chicken”。

您应该显示您尝试的代码以及使用该代码时发生的情况
strtok
是一个“棘手”的野兽。我将尝试追溯代码,并编辑帖子。如果其中一个字段为空(两个空格),strtok()将失败得很惨。基本上,strtok()就是不可用。