当前位置:网站首页>【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、运行结果示例

边栏推荐
- Germany if was crowned with many awards. How strong is this pair of headphones? In depth evaluation of yinpo GTW 270 hybrid
- SQL question brushing 584 Looking for user references
- [live broadcast appointment] database obcp certification comprehensive upgrade open class
- EndeavourOS移动硬盘安装
- Chinese diosgenin market forecast and investment strategy report (2022 Edition)
- 数据库系统原理与应用教程(005)—— yum 离线安装 MySQL5.7(Linux 环境)
- How to solve the problem that the battery icon of notebook computer does not display
- Report on Market Research and investment prospects of ammonium dihydrogen phosphate industry in China (2022 Edition)
- 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
- Comprehensively view the value of enterprise digital transformation
猜你喜欢

SystemVerilog structure (II)

Babbitt | yuan universe daily must read: Naixue coin, Yuan universe paradise, virtual stock game Do you understand Naixue's tea's marketing campaign of "operation pull full"

你还在用收费的文档管理工具?我这有更牛逼的选择!完全免费

毕业季 | 华为专家亲授面试秘诀:如何拿到大厂高薪offer?

Redis 分布式锁

Principes et applications du système de base de données (006) - - compilation et installation de MySQL 5.7 (environnement Linux)

Bugku's file contains

数据库系统原理与应用教程(004)—— MySQL 安装与配置:重置 MySQL 登录密码(windows 环境)

美国国家安全局(NSA)“酸狐狸”漏洞攻击武器平台技术分析报告

今天14:00 | 港大、北航、耶鲁、清华、加大等15位ICLR一作讲者精彩继续!
随机推荐
sql刷题1050. 合作过至少三次的演员和导演
Basic use of MySQL
Go language source level debugger delve
Dataframe gets the number of words in the string
Preliminary study on golang crawler framework
Zabbix2.2监控之系统及应用日志监控报警
红队第8篇:盲猜包体对上传漏洞的艰难利用过程
机器学习11-聚类,孤立点判别
P2592 [zjoi2008] birthday party (DP)
你还在用收费的文档管理工具?我这有更牛逼的选择!完全免费
Kali install Nessus
Authentication processing in interface testing framework
EndeavourOS移动硬盘安装
Girls who want to do software testing look here
VMware virtual machine failed during startup: VMware Workstation is incompatible with hyper-v
[nodemon] app crashed - waiting for file changes before starting... resolvent
拼接字符串,得到字典序最小的结果
Chinese diosgenin market forecast and investment strategy report (2022 Edition)
[live broadcast appointment] database obcp certification comprehensive upgrade open class
Origin2018安装与使用(整理中)