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

边栏推荐
- Dataframe gets the number of words in the string
- VMware virtual machine failed during startup: VMware Workstation is incompatible with hyper-v
- Why is the pkg/errors tripartite library more recommended for go language error handling?
- 数据库系统原理与应用教程(006)—— 编译安装 MySQL5.7(Linux 环境)
- Graduation season | Huawei experts teach the interview secret: how to get a high paying offer from a large factory?
- SQL question brushing 586 Customers with the most orders
- P2893 [USACO08FEB] Making the Grade G(dp&优先队列)
- Report on Market Research and investment prospects of ammonium dihydrogen phosphate industry in China (2022 Edition)
- 数据库系统原理与应用教程(002)—— MySQL 安装与配置:MySQL 软件的卸载(windows 环境)
- UML旅游管理系统「建议收藏」
猜你喜欢

Rhcsa Road

Exclusive news: Alibaba cloud quietly launched RPA cloud computer and has opened cooperation with many RPA manufacturers

【PyG】文档总结以及项目经验(持续更新
![[JetsonNano] [教程] [入门系列] [三] 搭建TensorFlow环境](/img/0e/52e37527bc717c7a55741725087bad.png)
[JetsonNano] [教程] [入门系列] [三] 搭建TensorFlow环境

【flask入门系列】Cookie与Session

String class

sql刷题627. 变更性别

Free lottery | explore the future series of blind box digital copyright works of "abadou" will be launched on the whole network!

Germany if was crowned with many awards. How strong is this pair of headphones? In depth evaluation of yinpo GTW 270 hybrid

Is the programmer's career really short?
随机推荐
SQL question brushing 586 Customers with the most orders
拼接字符串,得到字典序最小的结果
China carbon disulfide industry research and investment strategy report (2022 Edition)
SQL question brushing 627 Change gender
Red team Chapter 8: blind guess the difficult utilization process of the package to upload vulnerabilities
Preliminary study on golang crawler framework
Authentication processing in interface testing framework
Redis distributed lock
Red team Chapter 10: ColdFusion the difficult process of deserializing WAF to exp to get the target
判断链表是否是回文链表
Chinese diosgenin market forecast and investment strategy report (2022 Edition)
挖财学堂班主任给的证券账户安全吗?能开户吗?
为国产数据库添砖加瓦,StoneDB 一体化实时 HTAP 数据库正式开源!
MLPerf Training v2.0 榜单发布,在同等GPU配置下百度飞桨性能世界第一
Girls who want to do software testing look here
Rhcsa Road
Redis6.0 new features
Redis 分布式鎖
String class
Tutorial on the principle and application of database system (001) -- MySQL installation and configuration: installation of MySQL software (Windows Environment)