gpt4 book ai didi

c - 具有矩阵分配和文本碰撞的程序

转载 作者:行者123 更新时间:2023-11-30 16:35:39 25 4
gpt4 key购买 nike

我尝试这样解决:

#include <stdio.h>


#include <stdio.h>
#include <stdlib.h>
#include<string.h>
typedef struct
{
int r;
int c;
char *word;

} triplet;

int main()
{

triplet *a,aux;
char **b;
int j,i,n;
FILE *f,*g,*p;
f=fopen("data.txt","r");//Se deschide fisierul text
g=fopen("outfile.txt","w");
a=calloc(10,sizeof(triplet));//Se aloca dinamic spatiu pentru structura

i=0;

while (!(feof(f)))
{
a[i].word=malloc(60);
fscanf(f,"[ %d %d %s ]\n",&(a[i].r),&(a[i].c),a[i].word);
i++;
}

n=i;
printf("%d \n",n);

b = malloc(n * sizeof(char *));
for (i = 0; i < n; i++)
b[i] = calloc(n, sizeof(char));

for(i=0; i<n; i++)
{
printf("%d %d %s\n",a[i].r,a[i].c,a[i].word);
}

for(i=0; i<n; i++)
{
b[i]=realloc(b,a[i].c+strlen(a[i].word)*sizeof(char));
for(j=0; j<n; j++)
{
b[i][j]=' ';

for(i=0; i<n; i++)
{
for(j=0; j<strlen(a[i].word); j++)
// if ( b[a[i].r,a[i].c+j]==' ')
b[a[i].r,a[i].c+j]=a[i].word[j];
//else printf("collide at... \n");
}

for(i=0; i<n; i++)
for(j=0; j<n; j++)
printf("%c ",b[i][j]);


}
}
}



<!-- end snippet -->

#include <stdlib.h>
#include<string.h>
typedef struct
{
int r;
int c;
char *word;

} triplet;

int main()
{

triplet *a,aux;
char **b;
int j,i,n;
FILE *f,*g,*p;
f=fopen("data.txt","r");
g=fopen("outfile.txt","w");
a=calloc(10,sizeof(triplet));

i=0;

while (!(feof(f)))
{
a[i].word=malloc(60);
fscanf(f,"[ %d %d %s ]\n",&(a[i].r),&(a[i].c),a[i].word);
i++;
}

n=i;
printf("%d \n",n);

b = malloc(n * sizeof(char *));
for (i = 0; i < n; i++)
b[i] = calloc(n, sizeof(char));

for(i=0; i<n; i++)
{
printf("%d %d %s\n",a[i].r,a[i].c,a[i].word);
}

for(i=0; i<n; i++)
{
b[i]=realloc(b,a[i].c+strlen(a[i].word)*sizeof(char));
for(j=0; j<n; j++)
{
b[i][j]=' ';

for(i=0; i<n; i++)
{
for(j=0; j<strlen(a[i].word); j++)
// if ( b[a[i].r,a[i].c+j]==' ')
b[a[i].r,a[i].c+j]=a[i].word[j];
//else printf("collide at... \n");
}

for(i=0; i<n; i++)
for(j=0; j<n; j++)
printf("%c ",b[i][j]);
This is what I needed to do:

}
}
}

当我尝试实现它时,它只会读取结构以及如何动态分配矩阵空间,因为我不知道行数。我做错了什么?任何帮助都会非常感谢。我该如何处理碰撞问题?我想过使用 strlen 但不确定它是否有效。

enter image description here

最佳答案

以下建议代码:

  1. 干净地编译
  2. 从输入文件构建源数据数组
  3. 正确检查错误,如果发生错误,则会自行清除。
  4. 将其留给 OP 添加执行冲突检查的逻辑
  5. 将其留给OP添加逻辑以输出所需的结果

现在建议的代码:

 #include <stdlib.h>
#include <string.h>
#include <stdio.h>

struct sTriplet
{
int r;
int c;
char word[40];
};

typedef struct sTriplet triplet;


int main( void )
{

char line[62];
triplet *sourceArray = NULL;

FILE *fin = fopen( "data.txt", "r" );
if( !fin )
{
perror( "fopen to read data.txt failed" );
exit( EXIT_FAILURE );
}

// implied else, fopen successful

size_t lineCount = 0;
while( fgets( line, sizeof line, fin ) )
{
lineCount++;
triplet *temp = realloc( sourceArray, lineCount*sizeof( triplet ) );
if( !temp )
{
perror( "realloc failed" );
free( sourceArray );
exit( EXIT_FAILURE );
}

// implied else, realloc successful

sourceArray = temp;

if( 3 != sscanf( line, "[ %d %d %s ]",
&(sourceArray[lineCount].r),
&(sourceArray[lineCount].c),
sourceArray[lineCount].word) )
{
fprintf( stderr, "parsing of line from input file failed" );
free( sourceArray );
exit( EXIT_FAILURE );
}
}

char collisionChecker[ lineCount ][ MAX_LINE_LEN };
memset( collisionChecker, ' ', MAX_LINE_LEN * lineCount );

memcpy( &collisionChecker[0], &sourceArray[0], sizeof( triplet ) );

for( size_t i = 1; i < lineCount; i++ ) // 1 because 0 already set
{
// place logic here to check for overlaps and print status
}

free( sourceArray );

// note following loop may output some extra blank lines
for( size_t i=0; i< lineCount; i++ )
{
printf( "%s\n", collisionChecker[i] );
}
}

关于c - 具有矩阵分配和文本碰撞的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48813445/

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