gpt4 book ai didi

c - 动态数据结构、保留

转载 作者:行者123 更新时间:2023-11-30 17:06:12 30 4
gpt4 key购买 nike

我正在用 C 编写第一个更严肃的程序,但我陷入了困境。我需要将此列表排序为不同的单独文件,因此它看起来像这样:

BE30B Berlin 2014-04-02 Gale 02
BE30B Berlin 2014-04-02 Dobbs 15
OS43K Oslo 2014-04-03 Malik 34
BE30B Berlin 2014-04-02 Hatton 09
OS43K Oslo 2014-04-03 Lowe 21
OS43K Oslo 2014-04-03 Smith 03
BE30B Berlin 2014-04-02 Chapman 13
OS43K Oslo 2014-04-03 Murphy 41
BE30B Berlin 2014-04-02 Dawkins 19

输出:

BE30B.txt
Berlin 2014-04-02

02 Gale
09 Hatton
13 Chapman
15 Dobbs
19 Dawkins

我不知道如何开始写它。我不太擅长编程,我通常做html/css。我的函数目前看起来像这样,它在屏幕上打印整个列表。

struct Booking // creating a structure 
{
char number[6];
char dest[30];
char date[11];
char name[20];
int seat;
};


struct Bkg
{
struct Booking res;
struct Bkg *next;
};

struct Bkg *head = NULL;

void add_on_top( char* argnumber, char* argdest, char* argdate, char* argname, int argseat)
{
struct Bkg *temp=(struct Bkg*) malloc (sizeof(struct Bkg));

strcpy(temp->res.number, argnumber);
strcpy(temp->res.dest, argdest);
strcpy(temp->res.date, argdate);
strcpy(temp->res.name, argname);
temp->res.seat = argseat;

temp->next = head;
head = temp;

}

void insert( char* argnumber, char* argdest, char* argdate, char* argname, int argseat)
{

struct Bkg *head1 = head;
if (head != NULL) {

while (head1->next != NULL)
{
head1 = head1->next;
}
struct Bkg *temp = (struct Bkg*) malloc (sizeof(struct Bkg));
strcpy(temp->res.number, argnumber);
strcpy(temp->res.dest, argdest);
strcpy(temp->res.date, argdate);
strcpy(temp->res.name, argname);
temp->res.seat = argseat;
temp->next = NULL;
head1->next = temp;

}

else
add_on_top( argnumber, argdest, argdate, argname, argseat);
}

如果有人能帮助我,我将不胜感激。我只是不知道如何按符号对其进行排序,剩下的我可以做。

符号是航类号:BE30B。

我没有添加 main,因为那里没有发生太多事情,我有 struct Booking temp; ,我保留打开一个文件并读取它,然后使用函数 fscanf 处理它并使用我的函数 insert(temp.number, temp.dest, temp.date, temp.name, temp.seat);

用 C 编写代码不是我的选择,这是我的学校本学期才要求的东西。

最佳答案

开始:

定义一个结构体

struct flight 
{
char flightNumber[6];
char destinationCity[30];
char flightDate[11];
char passengerName[30];
unsigned passengerNumber;
}

使用struct Flight数组

struct flight Flights[20];

打开源文件阅读,一定要添加错误检查

FILE *fp = NULL;
fp = fopen( "inputfile.txt", "r" );

使用以下方式从文件中读取一行:

char *buffer = NULL;
size_t length = 0;

// loop through file
int recNum = 0;
while( -1 != getline( &buffer, &length, fp ) )

解析字段

char *token = NULL;
token = strtok( buffer, " " ); //< add error checking for each call to strtok
strcpy( Flights[ recNum ].flightNumber, token );

token = strtok( NULL, " " );
strcpy( Flights[ recNum ].destinationCity, token );

token = strtok( NULL, " " );
strcpy( Flights[ recNum ].flightDate, token );

token = strtok( NULL, " " );
strcpy( Flights[ recNum ].passengerName, token );

token = strtok( NULL, " " );
Flights[ recNum ].passengerNumber = atoi(token);

recNum++;

结束输入循环

对列表进行排序,首先按乘客编号字段排序,然后再次按航类编号排序

(简单的冒泡排序可以处理这么少量的条目。您可以在互联网上搜索该算法)

循环打印输出

  1. 其中,flightNumber 的更改导致使用第一行输出格式
  2. 然后打印passengeName+passengeNumber行输出格式

清理

fclose( fp );

对于大型输入文件来说,这可能无法很好地扩展,其中 Flights[] 最好声明为:

struct flight **Flights = NULL;  

并使用realloc()获取指向struct Flight的指针数组的内存

并使用malloc()获取struct Flight的每个实例的实际内存区域

如果使用内存分配函数,为了提高效率,请跟踪数组中使用了多少条目,当已满时,将条目数加倍。这最大限度地减少了对 realloc() 的调用次数,这一点很重要,因为每次对 realloc() 的调用都可能导致整个数组被复制。

关于c - 动态数据结构、保留,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34850246/

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