关于比较字符串函数strcmp()

书中介绍
s1与s2的前i的字符一致,但是s1的第i+1个字符小于s2的第i+1个字符。函数会认为s1小于s2。例如“abc”小于“bcd”,“abd”小于“abe”。
能否理解为两个字符串的对应元素逐个比较,谁首先出现ASC码值小于对方的元素。就说:这个元素小于另一个元素?
例如:"abcdfeg"小于“z”“abcd”小于“abcccccccc”
以及“24 XXXXXXXXXX”小于“5”?
如果我理解的正确,那么有如下代码片段:
程序接收用户输入的日期和提醒,按时间顺序存储这些日期和对应当日的提醒,并输出。
for(i=0;i if(strcmp(day_str,reminders[i])
break;
for(j=num_remind;j>i;j--)
strcpy(reminders[j],reminders[j-1]);//把当前i标记的日期后面的所有字符串各自下移一行
strcpy(reminders[i]),day_str);
strcat(reminders[i],msg_str);//把此日期以及相应的提醒存入reminders[i]中
num_remind++;
请问下面这条语句的比较方法对吗?
if(strcmp(day_str,reminders[i]) 假设循环已经把第一条字符串“24 XXXXXXXXXX”存进了reminders数组中、
接下来的这条语句会把day_str(以字符串形式存储的下一个日期,我们假设是5)
拿来和reminders[i](也就是“24 XXXXXXXXXX”)进行比较。得出的结果应该是
“5”>“24 XXXXXXXXXX”。这样程序就不会把5号以及5号的提醒事项塞入数组了

6个回答

这样的比较也没问题 但是用户输入时间必须要统一格式 比如你等待比较的是20180224 那么你输入的时间必须也得是20180205也就是输入格式必须一致 YYYYMMDD
这样比较就不会有错 你在处理的时候还得对输入的时间进行格式以及输入的数据是否正确才行。

whyyouhitme_
whyyouhitme_ 书中第一行是"24 XXXXXX",你的意思是再次输入的时候应该是“05 XXXXXX”?
接近 2 年之前 回复

第一行缺失了一些内容,试过两次都显示不出来。在这里补上
第一行的内容为:for(i=0;i<num_remind;i++) (num_remind是计数器,记录输入了几条提醒)if(strcmp(day_str,reminders[i])

strcpy(reminders[j],reminders[j-1]) 这样合适吗,字符串拷贝没那么高级吧,并不是整个字符串一起复制的,他应该是一个字符一个字符从前往后复制的吧。这样或许会覆盖吧

whyyouhitme_
whyyouhitme_ 哥们这块是没有问题的,倒着往回数,直到i之前的每一行都下移一行。
接近 2 年之前 回复

这样太复杂,建议采用指针方法,还不需要多余的buffer!

字符串比较 ,就是从第一个字符开始逐个比较,只要找到一个后面就省掉

把两个字符串相对应的字符拿出来进行比较,返回第一个不等的字符比较的大小即可。C语言系统为用户提供了库函数strcmp可以实现以上函数功能。调用格式为:strcmp(s1,s2);
teacher 和teaching,第一个不等的字符是teacher的e和teaching的i,所以teaching大

whyyouhitme_
whyyouhitme_ 请问“15 XXXXXXXX”“5 XXXXXXX”这两个字符串哪个大
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问