了解一个月提醒程序中的strcmp()函数
发布时间:2020-12-16 05:03:40 所属栏目:百科 来源:网络整理
导读:这是打印一个月提醒列表的程序.这是K.N.的一个例子.王书.我的问题是我无法理解strcmp函数在这个程序中是如何工作的. #include stdio.h#include string.h#define MAX_REMIND 50 /* Maximum number of reminders */#define MSG_LEN 60 /* max length of remind
这是打印一个月提醒列表的程序.这是K.N.的一个例子.王书.我的问题是我无法理解strcmp函数在这个程序中是如何工作的.
#include <stdio.h> #include <string.h> #define MAX_REMIND 50 /* Maximum number of reminders */ #define MSG_LEN 60 /* max length of reminders message */ int read_line(char str[],int n); int main(void) { char reminders[MAX_REMIND][MSG_LEN+3]; char day_str[3],msg_str[MSG_LEN+1]; int day,i,j,num_remind = 0; for(;;) { if(num_remind == MAX_REMIND) { printf("--No space left--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); 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("nDay Remindern"); for(i = 0; i < num_remind; i++) printf(" %sn",reminders[i]); return 0; } int read_line(char str[],int n) { int ch,i = 0; while((ch = getchar()) != 'n') if (i < n) str[i++] = ch; str[i] = ' '; return i; } 我理解的是,字符串存储在2D数组中,其中每一行都接受来自用户的字符串.程序首先获取日期(用户的两位小数)并使用sprintf()函数将其转换为字符串.然后它将转换后的字符串日期与存储在reminder [] []数组中的字符串进行比较. 我无法理解它如何将日期与字符串进行比较. (在这种情况下它总是返回true并且每次在i = 0处断开语句). 解决方法
此代码中使用的strcmp用于排序.添加一些调试代码(在第27行之后),您将看到strcmp产生的结果:
for(i = 0; i < num_remind; i++) { printf("%s comparing to %s is %d n",day_str,reminders[i],strcmp(day_str,reminders[i])); if(strcmp(day_str,reminders[i]) < 0) { break; } } 正如您所看到的,当新输入的day_str小于存储的提醒开头的任何其他提醒时,for循环被中断. strcpy(reminders[i],day_str); strcat(reminders[i],msg_str); 看看这个Insertion sort来理解这种排序. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |