| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1227 人关注过本帖
标题:在C语言中,怎么读入txt文件中的稀疏矩阵啊,麻烦大家看看,谢谢
只看楼主 加入收藏
Bingo_yue
Rank: 2
等 级:论坛游民
帖 子:11
专家分:10
注 册:2016-1-10
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
在C语言中,怎么读入txt文件中的稀疏矩阵啊,麻烦大家看看,谢谢
H矩阵.rar (3.26 KB)


H矩阵中,第一列表示行号,第二列表示该行有多少个不为0的数,后面的数字表示不为0的数的列号。
现在要用c语言读入这个数,然后对他进行操作,把它变成一个512*252的稀疏矩阵,再把这个512*252的稀疏矩阵存储在另一个文件中,
自己琢磨了很久,还是没有做出来,我的代码如下,大家能帮忙看一下吗?非常感谢
程序代码:
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<stdlib.h>

#define MAX_LENGTH 60

int main(int argc, char* argv[])
{
//StripSpace::Run();

FILE *h;
FILE *check;

char data[9][MAX_LENGTH];
char* result[252][9];
char* H[252][512];


check=fopen("data.txt","w");
if( (h=fopen("H矩阵.txt","rt"))==NULL )
   printf( "The file fscanf.out was not opened\n" );
else
{
int n = 0;
int j=0;
while ( !feof( h ))
{
fscanf( h, "%s %s %s %s %s %s %s %s %s", &data[0], &data[1], &data[2], &data[3], &data[4], &data[5], &data[6], &data[7], &data[8] );   // C4996

for (int i = 0; i < 9; i++)
{
result[n][i] = (char*)malloc(MAX_LENGTH);
strcpy(result[n][i], data[i]);
}

for(j=0;j<512;j++)
{
if(j==*result[n][i]&&(i!=0)&&(i!=1))

 *H[n][j]=1;
else 
  *H[n][j]=0;
}

fwrite(H, sizeof(H), 1, check);
for(j=0;j<512;j++)
  printf("%s",H[n][j]);
printf("\n");

n++;
}

fclose( h );
fclose( check );
for (int i = 0; i < 252; i++)
{
for (int j = 0; j < 9; j++)
{
free(result[i][j]);
}
}
}
return 0;
}
搜索更多相关主题的帖子: C语言 c语言 
2016-01-19 22:15
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:20 
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main( void )
{
    FILE* fin = fopen("H矩阵.txt","rt");
    if( !fin )
    {
        puts( "源文件打开失败." );
        return 1;
    }
    FILE* fout = fopen("data.txt","wt");
    if( !fout )
    {
        fclose( fin );
        puts( "输出文件创建失败." );
        return 2;
    }

    unsigned line_num = 0;
    unsigned row_number = -1;
    unsigned col_number = -1;
    char matrix[2000];
    for( char line[2000]; fgets(line,sizeof(line)/sizeof(*line),fin); )
    {
        size_t n = strlen(line);
        if( line[n-1]!='\n' && n+1==sizeof(line)/sizeof(*line) )
        {
            fclose( fout );
            fclose( fin );
            puts( "把line[]数组开大些吧." );
            return 3;
        }

        size_t a = strspn( line, " \t\r\n\v\f" );
        if( a == n ) // 空行
        {
        }
        else if( line[a] == '*' ) // 注释行
        {
        }
        else if( row_number==-1 && sscanf(line+a,"row_number %u",&row_number)==1 ) // 矩阵行数
        {
        }
        else if( col_number==-1 && sscanf(line+a,"col_number %u",&col_number)==1 ) // 矩阵列数
        {
            if( sizeof(matrix)/sizeof(*matrix) < col_number+2 )
            {
                fclose( fout );
                fclose( fin );
                puts( "把matrix[]数组开大些吧." );
                return 3;
            }
        }
        else if( row_number==-1 || col_number==-1 )
        {
            printf( "[不认识的行] %s", line );
        }
        else
        {
            unsigned line_no, p1;
            if( sscanf(line+a,"%u%n",&line_no,&p1)!=1 || line_num!=line_no )
            {
                fclose( fout );
                fclose( fin );
                printf( "[这行有问题呀] %s", line );
                return 4;
            }

            unsigned colnum, p2;
            if( sscanf(line+a+p1,"%u%n",&colnum,&p2)!=1 || line_num!=line_num )
            {
                fclose( fout );
                fclose( fin );
                printf( "[这行有问题呀] %s", line );
                return 4;
            }

            memset( matrix, '0', col_number );
            matrix[col_number+0] = '\n';
            matrix[col_number+1] = '\0';

            for( unsigned i=0, p=a+p1+p2, t; i!=colnum; ++i, p+=t )
            {
                unsigned col;
                if( sscanf(line+p,"%u%n",&col,&t)!=1 || col>col_number )
                {
                    fclose( fout );
                    fclose( fin );
                    printf( "[这行有问题呀] %s", line );
                    return 4;
                }
                matrix[col] = '1';
            }

            fputs( matrix, fout );
            ++line_num;
        }
    }
    if( ferror(fin) )
    {
        fclose( fout );
        fclose( fin );
        puts( "读取文件内容时发生错误." );
        return 5;
    }


    fclose( fout );
    fclose( fin );
    return 0;
}
2016-01-20 10:41
Bingo_yue
Rank: 2
等 级:论坛游民
帖 子:11
专家分:10
注 册:2016-1-10
收藏
得分:0 
回复 2楼 rjsp
非常感谢   
2016-01-20 13:36
快速回复:在C语言中,怎么读入txt文件中的稀疏矩阵啊,麻烦大家看看,谢谢
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.047961 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved