关于比较字符串函数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”?
一年多之前 回复

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

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

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

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

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

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

whyyouhitme_
whyyouhitme_ 请问“15 XXXXXXXX”“5 XXXXXXX”这两个字符串哪个大
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于字符串函数strcmp的应用
#includern#includernusing namespace std;rnint main()rnrn string name,note;rn cin>>name>>note;rn if(!strcmp(name,note))rn cout<<"ture";rn rn return 0;rnrnrn这个程序很简单 但是在if(!strcmp(name,note)) 这句里出错了rn错误提示是:'strcmp' : cannot convert parameter 1 from 'class std::basic_string,class std::allocator >' to 'const char *'rn No user-defined-conversion operator available that can perform this conversion, or the operator cannot be calledrn我也不知道是哪里出问题了 rn大家帮帮忙吧 谢谢啦
字符串函数strcmp
strcmp函数是字符串比较的函数,字符串比较的规则:对两个字符串自左往右逐个字符相比(按照ASCII码值大小比较),直到出现不同的字符或者遇到’\0’为止。如果全部字符相同,则认为相等;若出现不相等的字符,则以第一个不相同的字符的比较结果为准。自己编写的strcmp函数:#include <stdio.h>char *mystrcat(char *str1,char *str2) { ch
mysql字符串函数之strcmp用法
语法 STRCMP(expr1,expr2) STRCMP() returns 0 if the strings are the same, -1 if the first argument is smaller than the second according to the current sort order, and 1 otherwise. 如果字符串相同,则STRCMP()返回0...
C语言的字符串函数strcmp()和strcnmp()
C语言的字符串函数strcmp()和strcnmp() strcmp()函数简介strcmp() 用来比较字符串(区分大小写),其原型为: ​ int strcmp(const char *s1, const char *s2);【参数】s1, s2 为需要比较的两个字符串。字符串大小的比较是以ASCII 码表上的顺序来决定,此顺序亦为字符的值。strcmp()首
比较字符串strcmp()函数
strcmp()函数的原型:#include <string.h> int strcmp(const char *s1, const char *s2);strcmp()函数按照ASCII码表的顺序比较两个字符串,根据比较结果返回一个值,返回值有三种可能,其中返回0表示两个字符串一致。char *str = "string";if (strcmp(str, "string") == 0) {
Bugku—strcmp比较字符串
0x00 前言 这个是代码审计的题目。 题目 0x01 Start 首先我们来看一下源码: &amp;lt;?php $flag = &quot;flag{xxxxx}&quot;; if (isset($_GET['a'])) { if (strcmp($_GET['a'], $flag) == 0) //如果 str1 小于 str2 返回 &amp;lt; 0; 如果 str1大于 str2返回 &amp;gt; 0;如果两者相等,...
弄清字符串函数中strcmp函数的返回值问题
首先这个函数的作用是用来比较两个字符串是否相同的; strcmp(str1,str2)是它的使用格式; 而在比较的时候,又要先判断它们两之间的长度大小关系,如果不相等,肯定不会比较后得到的的结果是一样的;如果不等的话: 我们假设str1 >str2,那我们要遍历str1:while(*str1 != '\0'); 因为比较的是各字符的ASCⅡ码,所以:str1 > str2,返回-1;  
关于C读文件strcmp函数比较字符串
Sno Sname Ssex Sage Sdeptrn20120001 李勇 男 20 CSrn20120002 刘晨 女 19 CSrn20120003 王敏 女 18 MArn20120005 张立 男 19 ISrn读文本文件,查询信息rnrnrnrn#includern#includern#includern#includern#includern#include // exit()rn#define TRUE 1 // 函数结果状态代码rn#define FALSE 0rn#define OK 1rn#define ERROR 0rn#define INFEASIBLE -1rn#define NULL 0rnrntypedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等rnrnrntypedef struct Studentrn char Sno[8];rn char Sname[20];rn char Ssex[2];rn int Sage;rn char Sdept[2];rn struct Student *next;rnStudent,*LinkList;rnrnrnStatus InitList(LinkList &L) //构造一个空表rn L=(Student*)malloc(sizeof(Student));rn if(L!=NULL)rn printf("电脑空间不足!\n");rn return ERROR;rn rn L->next=NULL;rn return OK;rnrnrnrnStatus ReadStudent(LinkList &L) //读取Student文件rn Student *s,*p;rn FILE *fp;rn char buf[1024];rn s=L;rn fp=fopen("F:\\Student.txt","r+");rn fgets(buf,1024,fp); //跳过第一行rn while(fgets(buf,1024,fp)!=NULL) //读取每一行数据,直至读完rn p=(Student*)malloc(sizeof(Student));rn sscanf(buf,"%s %s %s %d %s ",p->Sno,p->Sname,p->Ssex,&(p->Sage),p->Sdept);rn s->next =p;rn s=p;rn p->next =NULL;rn rn fclose(fp);rn return OK;rnrnrnrnrnStatus Search_PutoutStudent(LinkList L) //根据学号输出学生的信息rn char sno[8];;rn Student *s=L;;rn printf("请输入你所要查询学生的学号:\n");rn scanf("%s",sno);rn while(s->next!=NULL && strcmp(s->next->Sno,sno))rn s=s->next;rn if(s==NULL)rn printf("您所输入的学号有误,不存在此学号的学生。\n");rn return ERROR;rn rn printf("学号\t姓名\n性别\t年龄\t系别\n");rn printf("%s\t%s\t%s\t%d\t%s \n",s->Sno,s->Sname,s->Ssex,s->Sage,s->Sdept);rn return OK;rnrnrnvoid main()rn LinkList L;rn InitList(L);rn ReadStudent(L);rn Search_PutoutStudent(L);rnrnrnrn调试时,输入20120001strcmpy()函数返回不是0
关于strcmp
void FileRead(char *chUser)rnrn FILE *fp;rn [color=#FF0000]char szUser[12];[/color] memset(szUser,'\0',12);rn if ((fp=fopen("User.txt","rt"))!=NULL)//文件里就是“sjh86126”rn rn fscanf(fp,"%s",szUser);rn nlen1=strcmp(chUser,szUser);rn [color=#FF0000]printf("%d",nlen1);[/color] fclose(fp);rn rnrnrnvoid inputUser()rnrn [color=#FF0000]char chUser[12];[/color] memset(chUser,'\0',12);rn for (int i=0; i<12;i++)rn rn chUser[i]=getch();//输入“sjh86126”rn fflush(stdin);rn putch(chUser[i]);rn rn FileRead(chUser);rnrnrn我输入sjh86126,为何nlen1等于1而不是0,明明是相等的啊。。。
关于strcmp()
buf[512],rn里面有数据"12345\n",rnrn现在我想比较buf是否为12345,rnif (strcmp(buf, "12345") == 0)rnrnrn还是 if (strcmp(buf, "12345\n") == 0)rnrnrn
关于"=="和strcmp()
当比较字符串的时候“==”和strcmp()是不是相等啊例如:rnif(!strcmp($str1,$str2))rnrn ………… rnrn和rnif($str1==$str2)rnrn …………rnrn是不是一样啊?
C++中strcmp和 ==的比较问题
nn```n char *str1 = "hello";n char str2[] = "hello";n if (str1 == "hello")n printf("ok1\n");n if (str2 == "hello")n printf("ok2\n");n if (strcmp(str1, "hello"))n printf("ok3\n");n if (strcmp(str2, "hello"))n printf("ok4\n");nn```n一道基础题,知道 ==比较地址,strcmp比较内容。n请各位大神指教为何输出的是 ok1 谢谢!nnn
关于字符串函数
请问delphi下的截取字符串的函数是什么,急!!!
关于字符串函数。
sql中那个函数返回一个字符在字符串中的位置。。
关于字符串函数的
#includern#includernrnrnvoid main() //这是个判断输入的字符串是否为回文数的程序。rnrnrn rn rn char a[20];rn int i,j;rn rn scanf("%s",a);rn rn i=strlen(a); //为什么strlen函数统计字符串的个数时忽略空格?rnrn for(j=0;j
关于strcmp的几个问题
int __cdecl strcmp (rnrn const char * src,rnrn const char * dstrnrn )rnrnrnrn int ret = 0 ;rnrn rnrn while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst)rnrn ++src, ++dst;rnrn rnrn if ( ret < 0 )rnrn ret = -1 ;rnrn else if ( ret > 0 )rnrn ret = 1 ;rnrn rnrn return( ret );rnrnrn这是MS C run-time中的strcmp实现源码。下面是几个问题:rn1.src和dst都为空串如何返回?rn2.为什么要用unsigned char*强制转换?rn3.可否用*src替换*dst作为while条件?rnrnrnrn
模拟实现strlen、strcpy、strcat、strcmp长度不受限制的字符串函数
模拟实现strlen函数 模拟实现strcpy函数 模拟实现strcat函数 模拟实现strcmp函数 模拟实现strlen函数 实现strlen函数有三种方法:递归实现、非递归实现、指针-指针实现。 int my_strlen(const char *str) my_strlen函数有一个参数类型为const char*的形参,作为接收要计算的...
关于strcmp函数的用法
strcmp函数是在string.h库下的han函数, 具体用法如下: strcmp函数是用来比较2个字符串的函数,如srcmp(字如果符串1,字符串2),从第一个字符开始比较,如果到最后两个字符串完全相同,则strcmp()函数输出的值为0;若开始出现不同的字符,根据这个字符ASCII码进行比较,若字符串1的ASSCII值大于2 则输出值 大于 0;反之,输出值 小于 0;...
关于strcmp的问题
我要对链表中取出的数据进行分类,使用了strcmp,代码如下:rnrn if(strcmp(nownode_PartNode->davalue.Right(1),"V")==0) rn rn nownode_PartNode->Type="C";rn rn elsern if(strcmp(nownode_PartNode->davalue.Right(1),"A")==0) rn rn nownode_PartNode->Type="A"; rnrn rn else rn nownode_PartNode->Type="B"; rn rnrn 从链表取出的davalue有三种类型,其中两种尾部都有字母标识,V和A,因此,在前两个strcmp中没有问题。最后的一种类型尾部没有标识,比如2,这样比较是不是会出现异? rnrn
关于strcmp的实现代码
[code=C/C++]rnint strcmp ( const char* src, const char* dst )rnrn int ret = 0 ;rn while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst)rn ++src, ++dst;rn if ( ret < 0 )rn ret = -1 ;rn else if ( ret > 0 )rn ret = 1 ;rn return( ret );rnrn//就不知道为什么要强制转换为unsigned char,难道真是网上说的提高效率?rn//提高效率怎么个提高法?[/code]
关于库函数STRCMP的实现
我在C语言现代方法这本书里面看到了STRCMP是这样实现的,觉得有点问题,想提出来高手们讨论下rnint strcmp(char *s,char *t)rnrnrn int i;rn for(i=0;s[i]==t[i];i++)rn if(s[i]=='\0')rn return 0;rn return s[i]-t[i];rnrnrn假设有 这两个字符串ABC ABCD 貌似这个算法不行啊rn我看这么改行不:rnint strcmp(char *s,char *t)rnrnrn int i;rn for(i=0;s[i]==t[i];i++)rn if(s[i]=='\0'[color=#FF0000]&&t[i]=='\0'[/color])rn return 0;rn return s[i]-t[i];rn
关于strcmp函数的疑惑
[code=c]rn#includern#includernvoid main()rnrn int i, ri, repeat,flag;rn char *date[] = "Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday" ;rn char str[80];rnrn scanf("%d", &repeat);rn getchar();rn for (ri = 1; ri <= repeat; ri++) rn scanf("%s", str);rn flag = -1;rn for (i = 1; i < 7; i++) rn if (strcmp(str,date[i])==0)rn flag = i + 1;rn rn printf("%d\n", flag);rn rnrn[/code]rn输入这段代码,打进Sunday,为什么显示的是-1呢,我感觉是函数的问题。
关于用strcmp的问题
char writeBuffer[10];rnmemset(writeBuffer,'b',10);rn rnchar readBuffer[10];rnmemset(readBuffer,'b',10);rn rnint r = strcmp(writeBuffer,readBuffer);rncout<
关于strcmp函数的问题
程序中有两个字符串,一个属于类数组变量:rnclass _FPGArnrn //......rn char DataToFpga[DataToFpgaLength]; // 最终经过转换传给fpga的数据rn //......rnrn rn 一个属于函数内部分配的内存空间:rnvoid _FPGA::test( void )rnrn //......rn char *ReadFlag = new char[40000];rn //......rn ReadFlag = xxx.Readxxx();rn if( !strcmp( ReadFlag,DataToFpga ) )rn rn xxxxx;rn rnrnrn现在函数的作用是首先让ReadFlag指向另一个函数的返回字符串,然后让其和DataToFpga比较,看是否相等,具体实现如上,可不管ReadFlag 获得的是什么样的返回值,strcmp都是返回,也就是相等,请问是为什么? rn
关于strcmp的疑问
int strcmp (const char * src, const char * dst)rnrn int ret = 0 ;rn while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst)rn ++src, ++dst;rn if ( ret < 0 )rn ret = -1 ;rn else if ( ret > 0 )rn ret = 1 ;rn return( ret );rnrn为什么要加&& *dst?
关于strcmp函数的小题
编写一个程序,它使用一个char数组和循环来每次读取一个单词,知道用户输入done为止,随后程序指出用户输入了多少个单词(不包括done在内)。下面是该程序的运行情况:rn[b]rnEnter:rnanteater birthdayrnenvy finagle done for surern[/b]rnyou entered a total of 4 words.rnrn使用函数strcmp()来进行比较测试.rnrn这个程序的该怎么写?希望说下原理
关于strcmp的一个问题
char* p="lovemydog";rnint lon=strlen(p);rnchar* q=(char*)malloc(lon);rnfor(int i=0;i
关于strcmp()函数参数的问题
[code=C/C++][/code]rn#include "stdio.h"rn#include "string.h"rnrnstruct studentrnrn char name[10];rn int age;rn int score;rn;rnrnint main(void)rnrn struct student information[3]=rn "zhaoxin",22,99,"lixiao",21,89,"chenhui",20,92 ; rn struct student *p_stu=information;rn char temp[10];rn int i,flag=0;rn rn printf("Enter name:");rn scanf("%s",temp);rn rn for(i=0;i<3;i++,p_stu++)rn if(strcmp(temp,p_stu->name)==0)rn /*strcmp的两个参数不都是地址吗,但是p_stu->name不是地址啊,rn 为什么运行起来结果是对的,我改成&p_stu->name后运行后也对,rn 难道两个都行码??? */rn rn rn printf("Yes\n");rn flag=1;rn break;rn rn rn if(flag==0)rn printf("No\n");rn rn rnreturn 0;rnrn
求助 关于strcmp函数
问题描述:做c++项目时遇到一个问题,我获取一个文件夹下有无文件,这个作为判断触发我下一个程序的依据,有文件时我打开连接电脑的继电器开关,无文件时关闭继电器。现在的问题是,我获取了文件夹下的文件,设定这个文件名字为1.txt,用strcmp函数比较获取的文件和1.txt,如果文件夹下为空,我的程序会直接运行出错,提示debug failed。这是啥情况,大神们,求助!
关于strcmp与const的问题
程序代码如下rnstrcmp(PY_Input,"cuo");rn编译时会警告Warning[Pe167]: argument of type "unsigned char *" is incompatible with parameter of type "char const *"rn如何解决呢?
关于函数strcmp
今天再学strcmp,rnrn编了下面一段代码:rnrnrnmain()rnrnrnchar c1[]="hao",c2[]="hah";rnrnif(strcmp(c1,c2)>0);rnrnprintf("yes");rnrnprintf("\n\n\n");rnrngetch();rnrnrnrn不管c1>c2,还是c1
关于strcmp()函数的实现
#include <stdio.h> #include <stdlib.h> #include <string.h>int cmp(char *p1,char *p2);int main() { char s1[20],s2[20]; int re; gets(s1); gets(s2); re=cmp(s1,s2); printf("%d\n",re
关于strcmp函数的使用?
我要对strings字符串数组进行按升序排序。采用了 (strcmp(strings[top],strings[seek])函数,一直闹不明白的是strcmp(strings[top],strings[seek])> 0,而不是strcmp(strings[top],strings[seek]) < 0? rn strcmp(strings[top],strings[seek]) 函数不是说strings[top]排在strings[seek],就返回大于0吗?那为什么还需要下面答案中提供的进行呼唤??rnrn答案:rnvoid stsrt(char *strings[], int num)rnrn char *temp;rn int top, seek;rnrn for (top = 0; top < num-1; top++)rn for (seek = top + 1; seek < num; seek++)rn if (strcmp(strings[top],strings[seek]) >0)rn rn temp = strings[top];rn strings[top] = strings[seek];rn strings[seek] = temp;rn rn
strcmp
怎么编写代码来实现的strcmp的功能不使用strcmp
strcmp()?
[code=c]rnchar a[ ]='a','b','c','d';rnchar b[10];rnchar *p=b;rnrnstrncmp(b,a,2);rn//复制后,数组:b,末尾有空字符:'\0'么?rnb[2+1]='\0';rn//这语句有用么?rnrnwhile(*p)rn rn cout<<*p;rn ++p;rn rn[/code]rnrn为什么,程序输入有乱码呢?
C中数据的比较简介(strcmp、memcmp)
strcmp与memcmp
51单片机用到strcmp比较字符串问题及解决
51单片机用到strcmp比较字符串问题及解决
字符串函数模拟实现之strcpy、strncpy、strcmp、strncmp、strcat、strncat
一、strcpy与strncpy函数的模拟实现 1、strcpy函数的模拟实现       strcpy函数原型为 char *strcpy(字符数组1,字符串2),strcpy是string copy(字符串复制)的简称,表示“字符串复制函数”,作用是将字符串2复制到字符数组1中去。基本功能我们都清楚,那么在函数产生作用前后数组1所在内存发生了什么事呢?我们先使用一下strcpy函数看对数组
c语言学习笔记(字符串函数strcmp,strcat,strcpy,strlen的简单实现)
1.连接函数strcat 2.复制函数strcpy 3.比较函数strcmp 4.长度strlen
strlen、strcpy、strstr、strcmp等字符串函数的模拟实现
strlen的模拟实现 strlen函的函数数原型为: size_t strlen ( const char * str ); strlen函数返回C字符串str的长度。 实现: #include&amp;lt;stdio.h&amp;gt; #include&amp;lt;assert.h&amp;gt; //运用循环遍历一遍字符串 size_t my_strlen1(const char *str) { ...
相关热词 c# 线程结束时执行 c# kb mb 图片 c# 替换第几位字符 c#项目决定成败 c# 与matlab c# xml缩进 c#传感器基础 c#操作wps c# md5使用方法 c# 引用父窗口的组件