gpt4 book ai didi

c - 我如何在 C 编程中使用文件中的输入数据?

转载 作者:太空宇宙 更新时间:2023-11-04 08:51:56 25 4
gpt4 key购买 nike

我有一个使用单词搜索的程序。我有一个包含拼图和单词的数据文件。我可以在我的程序中实现什么,以便它读取文件并将其中存在的字母存储为数组?

数据文件示例(称为testdata):

h e l l o a c d 
f g b w o r l d
h a c c v b n a
e q b x n t q q
y e h n c a q r
hello
world
hey

我想将所有字母存储在一个二维数组中。另外,我需要将所有单词存储在一维数组中。

数据文件中可能的 AxA 字母正方形的列或行的最大行数是 25。因此,我认为我应该为字母声明一个该大小的数组,然后将它们写入该数组.

我只是不知道如何将它们读入该数组。数组中每个字母后都有一个空格,单词中没有空格,所以我认为这可能有助于将字母放在一个数组中,将单词放在另一个数组中。

最佳答案

鉴于你的问题和你的意见,有几个问题,但为了节省时间,现在,我对数组的维度做了一些假设,即它不一定是方形的(如AxA 正方形的列或行)。实际的数据样本不同意,所以我写了一个例程来计算一切。字母数组只是一个数组的数组,但由于它存储在顺序内存中,所以它看起来就像一个长数组。每个字符串也都在自己的位置。在任何情况下,这段代码都应该足以让您走上正确的轨道......

#include <ansi_c.h>
#include <stdio.h>

void GetFileContents(char *file, int *nWords, int *lw, int *r, int *c);
void allocMemoryStr(int numStrings, int max);
void allocMemoryLtr(int numStrings, int max);
void freeMemoryStr(int numStrings);
void freeMemoryLtr(int numletters);
#define FILENAME "c:\\dev\\play\\_puzzle.txt"

char **letters;
char **strings;

int main()
{
int longest, cnt, wCount, rows, cols, i;
char line[260];
FILE *fp;
char *buf=0;

GetFileContents(FILENAME, &wCount, &longest, &rows, &cols);

allocMemoryStr(wCount, longest); //for strings
allocMemoryLtr(rows*cols, 1); //for strings

//read file into string arrays
fp = fopen(FILENAME, "r");
cnt=0;
for(i=0;i<rows;i++)
{
fgets(line, 260, fp);
buf = strtok(line, " \n");
while(buf)
{
strcpy(letters[cnt], buf);
buf = strtok(NULL, " \n");
cnt++; //use as accurate count of words.
}
}
cnt=0;
while(fgets(line, 260, fp)) //get remainder of lines into strings
{
//[EDIT]removed fgets()
buf = strtok(line, " \n");
while(buf)
{
strcpy(strings[cnt], buf);
buf = strtok(NULL, " \n");
cnt++; //use as accurate count of words.
}
}
fclose(fp);
freeMemoryStr(wCount);
freeMemoryLtr(rows*cols);
return 0;
}

void GetFileContents(char *file, int *nWords, int *lw, int *r, int *c)
{
char line[260];
FILE *fp;
char *buf=0;
char temp[80];
int wc=0, rc=0, cc=0, ck=0;

fp = fopen(FILENAME, "r");
while(fgets(line, 260, fp))
{
rc++;
buf = strtok(line, " \n");
while(buf)
{
strcpy(temp, buf); // word handler
if(strlen(temp) > 1)
{
wc++;
rc--; //
}
else if(strlen(temp) == 1) //leter handler
{
cc++;
(cc>ck)?(ck=cc):(cc=cc);
}
buf = strtok(NULL, " \n");
}
cc = 0;
}
fclose(fp);
*nWords = wc;
*r = rc;
*c = ck;
}

void allocMemoryStr(int numStrings, int max)
{
int i;
strings = calloc(sizeof(char*)*(numStrings+1), sizeof(char*));
for(i=0;i<numStrings; i++)
{
strings[i] = calloc(sizeof(char)*max + 1, sizeof(char));
}
}
void allocMemoryLtr(int numletters, int max)
{
int i;
letters = calloc(sizeof(char*)*(numletters+1), sizeof(char*));
for(i=0;i<numletters; i++)
{
letters[i] = calloc(sizeof(char)*max + 1, sizeof(char));
}
}

void freeMemoryStr(int numStrings)
{
int i;
for(i=0;i<numStrings; i++)
if(strings[i]) free(strings[i]);
free(strings);
}
void freeMemoryLtr(int numletters)
{
int i;
for(i=0;i<numletters; i++)
if(letters[i]) free(letters[i]);
free(letters);
}

关于c - 我如何在 C 编程中使用文件中的输入数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19350465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com