当前位置:网站首页>【C补充】【字符串】按日期排序显示一个月的日程
【C补充】【字符串】按日期排序显示一个月的日程
2022-07-01 16:28:00 【一苇以航fp】
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); //读取事件内容并存储
int main(void)
{
char reminders[MAX_REMIND][MSG_LEN+3]; //+3是预留日期和字符串空字符的位置
char day_str[3], msg_str[MSG_LEN+1]; //临时存储日期和事件
int day, i, j;
int num_remind = 0; //记录已读取的日程数量
//设置死循环,保证用户可持续输入
for(;;){
//限制读取数量
if(num_remind == MAX_REMIND){
printf("———————————— 日程已达上限 ————————————\n");
break;
}
printf("Enter day and reminder: ");
scanf("%2d", &day); //读取前两位的数字
if(day == 0) break; //读取终止
sprintf(day_str, "%2d", day); //将日期转换为字符串存储,占两格右对齐
read_line(msg_str, MSG_LEN); //读取事件并存储
/********按日期排序********/
//逐行比较,找到适合适合的位置(i)
for(i=0; i<num_remind; i++){
if( strcmp(day_str, reminders[i]) < 0 ) break;
}
//空出该位置所在行(其下方字符串各下移一行)
for(j=num_remind; j>i; j--){
strcpy( reminders[j], reminders[j-1] );
}
//将日期和事件合并存储
strcpy( reminders[i], day_str );
strcat( reminders[i], msg_str );
num_remind++;
}
//逐行显示排序后的日程
printf("\n\nDay Reminder: \n");
for(i=0; i<num_remind; i++){
printf(" %s\n", reminders[i]);
return 0;
}
int read_line(char str[], int n)
{
int i=0, ch;
while( (ch=getchar()) != '\n' ) //空格不会被跳过(与scanf不同)
if(i<n) str[i++] = ch;
str[i] = '\0'; //字符数组末位加空字符,成为字符串
return i; //返回字符数组长度
}
4、运行结果示例
边栏推荐
- Determine whether the linked list is a palindrome linked list
- 巴比特 | 元宇宙每日必读:奈雪币、元宇宙乐园、虚拟股票游戏...奈雪的茶这波“操作拉满”的营销活动你看懂了吗?...
- Concatenate strings to get the result with the smallest dictionary order
- 挖财学堂班主任给的证券账户安全吗?能开户吗?
- Installation and use of sqoop
- Tutorial on principles and applications of database system (004) -- MySQL installation and configuration: resetting MySQL login password (Windows Environment)
- 拼接字符串,得到字典序最小的结果
- Chinese diosgenin market forecast and investment strategy report (2022 Edition)
- 免费抽奖 | 《阿巴豆》探索未来系列盲盒数字版权作品全网首发!
- 想做软件测试的女孩子看这里
猜你喜欢
Redis 分布式鎖
数据库系统原理与应用教程(001)—— MySQL 安装与配置:MySQL 软件的安装(windows 环境)
美国国家安全局(NSA)“酸狐狸”漏洞攻击武器平台技术分析报告
What is the effect of choosing game shield safely in the game industry?
Endeavouros mobile hard disk installation
[pyg] document summary and project experience (continuously updated
What is the digital transformation of manufacturing industry
Basic usage of Frida
Authentication processing in interface testing framework
数据库系统原理与应用教程(003)—— MySQL 安装与配置:手工配置 MySQL(windows 环境)
随机推荐
Virtual serial port simulator and serial port debugging assistant tutorial "suggestions collection"
为国产数据库添砖加瓦,StoneDB 一体化实时 HTAP 数据库正式开源!
How to use F1 to F12 correctly on laptop keyboard
ShenYu 网关开发:在本地启用运行
Zabbix2.2 monitoring system and application log monitoring alarm
Is it reliable to open an account on flush with mobile phones? Is there any potential safety hazard
Girls who want to do software testing look here
FPN network details
MLPerf Training v2.0 榜单发布,在同等GPU配置下百度飞桨性能世界第一
Rhcsa Road
Determine whether the linked list is a palindrome linked list
Internet News: "20220222" get together to get licenses; Many products of Jimi have been affirmed by consumers; Starbucks was fined for using expired ingredients in two stores
免费抽奖 | 《阿巴豆》探索未来系列盲盒数字版权作品全网首发!
How to optimize repeated if err in go language= Nil template code?
VMware virtual machine failed during startup: VMware Workstation is incompatible with hyper-v
FRP intranet penetration, reverse proxy
判断一棵二叉树是否为平衡二叉树
C語言輸入/輸出流和文件操作
How to restore the system with one click on Lenovo laptop
How wild are hackers' ways of making money? CTF reverse entry Guide