1、程序说明
要求: 用户按固定格式输入一系列日程(输入0时停止),程序将其按日期排序,并逐行显示。
输入格式: “日期 事件”。例如 “24 Mom’s birthday”
2、思路
2.1 字符串存储形式
- 将读入的字符串中的日期和事件分开存储(
scanf读取日期,getchar逐个读取事件字符串
),便于之后的比较和排序。 - 排序(
strcpy函数
)结束后,二者合并(strcat函数
)存储,存储在二维字符数组中; - 将排序好且合并后的字符数组逐行输出。
2.2 排序存储的方法
- 提取日期,单独存储,将其与此前的日期比较(
strcmp函数
);
此前的日期已被存储在日程字符串的前2位,由strcmp函数
的比较机制,不必额外单独提取 - 找到比其大的那一行,余下各行各下移一行,空出该行的位置;
由数组存储机制,下移实际是后移 - 将该日期对应的完整内容存储在空出的该行之中。
3、代码
/************************************
* 显示一个月的日程列表 *
* **********************************/
#include<stdio.h>
#include<string.h>
#define MAX_REMIND 50 //事件个数上限
#define MSG_LEN 60 //各事件描述的长度上限
int read_line(char str[], int n); //读取事件内容并存储