使用C语言C++从一个文本文件导入字符串矩阵

问题遇到的现象和发生背景

img

对字符串矩阵txt文件的处理

问题相关代码,请勿粘贴截图
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

文件中字符串矩阵每一列编入一个矩阵
后续文件内容要也能添加进这些矩阵

字符串以空格分隔的吗?
可以逐行读取字符串,然后根据空格分隔出每一个元素就可以了。
下面的例子是以1个或多个空格分割每行的字符串。
data.txt文件:

L1    L1L    L1R
L2    L2L    L2R
L3    L3L    L3R
L4    L4L    L4R

运行结果:

img

代码:


#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;


}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632