基本上我正在做的是读取随机文本文件,删除标点符号并将单词排列到链接列表中。
使用此
一切正常printf("%c", (*(buf+x)));
所以例如,文本文件具有以下
“他们是我们可能去的地方,”
打印正确的输出
theyre
their
where
ever
we
may
go
go
我的问题是,如何将这些转换为字符串并将它们存储在数组中?
答案 0 :(得分:1)
我假设您要重用buf
,因此您希望将这些单词复制到单独分配的存储中。如果在复制之前使用空字节终止buf
中的每个单词,即'\0'
,则可以使用strdup
复制它。您可以稍后使用free
释放空间。添加以下内容(第二个适用于free
):
#include <string.h>
#include <stdlib.h>
这是一个简单的例子:
buf[0] = 'a';
buf[1] = 'b';
buf[2] = 'c';
buf[3] = '\0';
str = strdup(buf);
答案 1 :(得分:0)
我假设您要将文件中的单词存储在数组中并打印出来。 您可以尝试以下方法:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
char *buf[40];
for (int n = 0; n < 40; n++)
{
buf[n] = (char*)malloc(20 * sizeof(char));
}
FILE *file;
fopen_s(&file, "file.txt", "r");
int c, i = 0, j = 0;
bool init = 0;
while ((c = getc(file)) != EOF)
{
if (c != ' ')
{
buf[i][j] = c;
j++;
init = 1;
}
else
{
if (init)
{
buf[i][j] = '\0';
i++;
j = 0, init = 0;
}
}
}
buf[i][j] = '\0';
for (int x = 0; x <= i; x++)
{
printf("word[%d] : %s\n", x, buf[x]);
}
for (int x = 0; x < 40; x++)
{
free(buf[x]);
}
fclose(file);
return 0;
}
答案 2 :(得分:0)
尝试使用此代码来理解更好的概念:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
char c;
int i = 0, count = 0,max = 0;
FILE *fp;
fp = fopen("file.txt", "r");
if(fp == 0)
{
printf("File is not opened\n");
return;
}
else
{
// Finding line having maximum characters from the file to allocate that much memory..
while ((c = getc(fp)) != EOF)
{
count++;
if(c == '\n')
{
if(count > max)
max = count;
count = 0;
}
else
{
count = 0;
}
}
}
rewind(fp);
// Allocating the memory up to max line from the file.
char *temp = (char*)malloc(max * sizeof(char));
while ((c = getc(fp)) != EOF)
{
if ((c >= 'a' && c<='z') || (c >= 'A' && c <= 'z'))
{
temp[i++] = c;
}
else if(c == ' ' || c == '\n')
{
temp[i] = '\0';
printf("%s\n",temp);
i = 0;
memset(temp,'\0',max);
}
}
free(temp);
fclose(fp);
return 0;
}