问题遇到的现象和发生背景
对字符串矩阵txt文件的处理
问题相关代码,请勿粘贴截图
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果
文件中字符串矩阵每一列编入一个矩阵
后续文件内容要也能添加进这些矩阵
对字符串矩阵txt文件的处理
文件中字符串矩阵每一列编入一个矩阵
后续文件内容要也能添加进这些矩阵
字符串以空格分隔的吗?
可以逐行读取字符串,然后根据空格分隔出每一个元素就可以了。
下面的例子是以1个或多个空格分割每行的字符串。
data.txt文件:
L1 L1L L1R
L2 L2L L2R
L3 L3L L3R
L4 L4L L4R
运行结果:
代码:
#include <stdio.h>
#include <stdlib.h>
//最大是20*20的矩阵
#define MAXNMB (int)20
//假设字符串最长为15
#define MAXLEN (int)15
int main()
{
char* a[MAXNMB][MAXNMB] = {0}, * p = 0;
char ch,pre=0;
int row = 0, col = 0; //保存实际的行列数
int i=0,j=0,k=0;
FILE* fp = fopen("data.txt", "r");
if (fp == 0)
{
printf("文件打开失败!\n");
return 0;
}
p = (char*)malloc(MAXLEN);
a[0][0] = p;
//假设每行的字符串以1个或者多个空格分隔
while (!feof(fp))
{
ch = fgetc(fp);
if (ch == '\n')
{
p[j] = 0;
pre = 0;
row++;
if (col == 0) //保存列数
col = i+1;
i = 0;
p = (char*)malloc(MAXLEN); //假设字符串最长为20
a[row][i] = p;
}else if (ch == ' ')
{
pre = ch;
p[j] = 0;
}
else
{
if (pre == ' ')
{
i++;
p = (char*)malloc(MAXLEN);
a[row][i] = p;
j = 0;
p[j] = ch;
j++;
pre = ch;
}
else if (pre == 0)
{
j = 0;
p[j] = ch;
j++;
pre = ch;
}
else
{
p[j] = ch;
j++;
pre = ch;
}
}
}
p[j] = 0;
fclose(fp);
if (pre != '\n')
{
row++;
}
//输出
for (j = 0; j < row; j++)
{
for (k = 0; k < col; k++)
printf("%-15s", a[j][k]);
printf("\n");
}
return 0;
}