百度
360搜索
搜狗搜索

编写strcmp函数,C语言编程strcmp函数的问题详细介绍

本文目录一览: strcmp函数怎么写?

int strcmp(const char* str1, const char* str2)
{
int ret = 0;
while(!(ret=*(unsigned char*)str1-*(unsigned char*)str2) && *str1)
{
str1++;
str2++
}
if (ret < 0)
{
return -1;
}
else if (ret > 0)
{
return 1;
}
return 0;
}
要从内存的角度去看这个问题
首先,int
strcmp(char
*s,char
*t)这个函数的参数是2个指针分别指向内存的2个不同位置
for(
;
*s
==
*t;s++,t++)
是使得2个指针比较,相同就向后移动
if(*s
==
0)
return
0
指针为空,返回false.
不为空返回2指针内存的地址差
result = strcmp(char *s, char *t);
比较数组 s 和数组 t 的大小,s>t,result>0;
s=t,result=0;
s
<t,result<0;
int _strcmp(char *s, char *t) /*_strcmp避免与内置函数strcmp冲突*/

{

for(;*s==*t;s++,t++)

if(*s==0)

return 0;

return *s-*t;

}
</t,result<0;

帮我写一个简易的strcmp函数(C语言)。

int strcmp_s(char *src,char*des){if(src==NULL||des==NULL) return NULL;while((*src++==*des++)!='\0');if(*src=='\0') return 0;return (*src-*des);}
① c的strcmp简洁实现可以是这样的:
int strcmp(const char* s1, const char* s2){ while(*s1 && (*s1==*s2)) s1++,s2++; return *(const unsigned char*)s1-*(const unsigned char*)s2;}② strcmp的返回值可以有3种,即<0, =0, >0 (任意一个数值),代表的含义分别是: str1 strcmp用的是二进制比较,意思是按字典顺序,比如: 字母a < 字母 b;而a > A。 (这是因为a的ascii码是97,而A的是65)。
理解了这个,上面的代码就好理解了。 while就是s1,s2从头到位一个一个字符的比较。如果s1为空,或者s1不等于s2,则中断循环 (s1不为空,s2为空,则是*s1 != *s2,退出循环)。返回值是循环中断时的字符(分别s1和s2对应的位置,*s1-*s2, 如果是上面说的 'a' - 'A', 那么返回的就是97-65=32),那么意味着a在A前面, strcmp > 0。
之所以先转换成const unsigned char*再作减法,是由于c的char有三种: char, signed char 和unsigned char。 char就是'a'这样的, 而 signed char 则是-127~126之间的数值,而unsigned char则是0~255之间的一个值。 转换成unsigned char就是要“确保” 'a' ---> 97。 你要不转换,也是可以的。
说明一点,很多c的lib实现,比如gnu c, 都是把结果处理成: -1, 0, 1, 而不是这个字符对应的ascii码的差值。

1. 编写一个strcmp函数实现两个字符串的比较:

int stringcmp(char *s1,char *s2)
{
while(*s1||*s2) //如果S1和S2比较完毕 (‘\\0’)跳出循环;
{
if(*s1-*s2) //判断S1和S2对应的字符是不是不同;
return *s1-*s2; //如果不同,返回S1和S2的ASCII之差;
else // 如果相同,让指针指向S1和S2的下一个字符比较
{
s2++;
s1++;
}
}
return 0; // S1和S2相等的时候返回0;
}
int mystrcmp(char* s1, char* s2)
{
while (*s1==*s2)
{
if(*s1=='\0') return 0;
s1++;
s2++;
}
return *s1-*s2;
}
应该可以:
main()
{
char str1[20],str2[20];
int i=0,j=0,flag;
gets(str1);
gets(str2);
while(str1[i]!='\0'&&str2[j]!='\0')
{
if(str1[i++]>str2[j++]) flag=1;
else if(str1[i++]
<str2[j++]) flag="-1;
else flag=0;

}

if(flag==1) printf("str1-str2>0");

if(flag==-1) printf("str1-str2<0");

if(flag==0) printf("str1-str2==0");

getch();

}

C语言编程strcmp函数的问题

如果a>b,strcmp(a,b)返回的是>0;
如果a==b,strcmp(a,b)返回的是0;
如果a
<b,strcmp(a,b)返回的是<0;
你可以方便记忆成strcmp(a,b)的结果就是a-b。a比较大的话结果自然就是>0

#include

#include

int main()

{

char str1[100],str2[100];

printf("input 2 strings: ");

scanf( "%s %s", str1,str2 ); /eg: hello world

if(strcmp(str1,str2)< 0)printf("str1
<str2");
else if(strcmp(str1,str2) > 0)printf("str1 > str2");

else

printf("str1 == str2");

printf("\n");

return 0;

}

if(strcmp(str1,str2)==0)printf("str1==str2");

strcmp()函数原型是

int strcmp(const char *s1,const char *s2)如果s1的字符串在机器编码顺序中落后于s2,函数返回值是一个大于0的整数;如果两个字符串相同的话,返回值是0;如果第一个字符串在机器编码顺序中先于第二个字符串,返回值是一个<0的数。

看函数的返回值类型是 int,那么你就可以定义一个int 值来表示,例如

int cmp=strcmp(s1,s2)cmp>0说明s2>s1;

cmp=0说明s2=s1;

cmp<0说明s2
<s1;
或者可以直接使用

if(strcmp(str1,str2))作为判断条件。
</s1;
</str2");

阅读更多 >>>  python实例100例,python用while求1到100的和

</b,strcmp(a,b)返回的是<0;

C语言strcmp函数是什么样的代码

C语言中strcmp函数是string库的常用函数。其原型代码和介绍如下:
1.先说一下这个函数的实现原理,向strcmp()函数中传入两个字符串(记为str1,str2).传入之后,通过把str1的各字母的ASCII码值和str2的各字母的ASCII码值进行比较。若str1>str2则返回正数,若str1=str2则返回0,否则,则返回负数。
2.下面实现代码:
3.整个函数的原型中得益于“(*str1!='\0')&&(*str1==*str2)”这一句的代码,因为这样当字符指针指向空,意味着字符串已经移动到最后了,比较结束,此时可以退出循环。而如果两个字符串不相等时,则此时函数也可以退出了。
扩展资料:
这个函数要注意一下几点:
①使用*(unsigned char*)str1而不是用*str1。这是因为传入的参数为有符号数,有符号字符值的范围是-128~127,无符号字符值的范围是0~255,而字符串的ASCII没有负值,若不转化为无符号数这回在减法实现时出现错误。
②While循环中ret=*(unsigned char*)str1-*(unsigned char*)str2) && *str1,最后与上str1也可以换成str2,因为前面已经做了相减,无论哪个先为‘\0’都会退出。因为最后与上str1是为了判断str1是否结束,即是否为‘\0’。
③这个函数没有判断参数为NULL时的情况,所以当传入NULL时程序会崩溃。网上看别人说商业化代码都会在调用strcmp前先判断是否为NULL,所以可以不用判断NULL;我在VC6上测试string.h中的strcmp(NULL,NULL),程序也会崩溃。这里可以根据实际情况来决定。
参考资料来源:百度百科-strcmp函数

C语言strcmp函数

两个字符串自左向右逐个字符相比,出现不同的字符b和B
s1>s2,返回正数;
因为ASCII码中B在b后面
原型:int strcmp(const char firststring[], const char secondstring);
功能:比较两个字符串firststring和secondstring
例程:
#include

#include

void main(void)

{

  char buf1[] = "aaa";

  char buf2[] = "bbb";

  char buf3[] = "ccc";

  int ptr;

  ptr = strcmp(buf2,buf1);

  if(ptr > 0)

   cout <<"Buffer 2 is greater than buffer 1"<
<endl;
  else

   cout <<"Buffer 2 is less than buffer 1"<
<endl;
  ptr = strcmp(buf2,buf3);

  if(ptr > 0)

   cout <<"Buffer 2 is greater than buffer 3"<
<endl;
  else

   cout <<"Buffer 2 is less than buffer 3"<
<endl;
}

运行结果是:Buffer 2 is less than buffer 1

Buffer 2 is greater than buffer 3

C语言:编写函数MyStrCmp并用相应主函数进行测试

#include

#define N 100

int MyStrCmp(char * s1, char * s2){

int ret, i=0;

while(s1[i]!='\0' && s2[i]!='\0' && s1[i]==s2[i])

i++;

if(s1[i]==0 && s2[i]==0)

ret=0; //相等

else if(s1[i]==0)

ret=-1; //串s1小于串s2

else if(s2[i]==0)

ret=1; //串s1大于串s2

else if(s1[i]>s2[i])

ret=1; //串s1大于串s2

else

ret=-1; //串s1小于串s2

return ret;

}

int main(){

char s1[N], s2[N];

gets(s1);

gets(s2);

printf("%s\n%s\n",s1,s2);

printf("%d\n", MyStrCmp(s1, s2));

return 0;

}

BOOL MyStrCmp(char* a,char* b)

{

return a[0]>=b[0];

}

#include

#include

int MyStrCmp( char *s1,char *s2 );int main(){ char s1[30], s2[30]; gets(s1); gets(s2); printf("%d\n", MyStrCmp(s1, s2)); return 0;}int MyStrCmp(char * s1, char * s2){ int flag = 0;//0表示相等,1表示s1大于s2,-1表示s1小于s2 int minLength = 0; //较短串的长度 int i = 0; minLength = strlen(s1) >= strlen(s2) ? strlen(s1) : strlen(s2); for(i = 0; i < minLength; i++) { if(s1[i] != s2[i]) { if(s1[i] > s2[i]) flag = 1; else flag = -1; break; } else continue; } return flag;}

C语言编程-用数组方法编写函数strcmp,比较两个字符串的大小。

#include

#include

int compare(char a[],char b[]);

void main()

{

int number;

char str_a[20],str_b[20];//可以根据长度设置

cin>>str_a>>str_b;

number=compare(str_a,str_b);

cout<
<number<<endl;
}

int compare(char a[],char b[])

{

int i;

if(strcmp(a,b)==0)

return 0;

else

{

for(i=0;;i++)

if(a[i]!=b[i]) break;

return (int (a[i]));

}

}

用strcmp比较,只能比较是否相等,得不到不同字符的下标,还是得用数组。

#include

阅读更多 >>>  PHP中strlen()和mb_strlen()的区别浅析

#include

char *fun(char *s,char *t)//对两个字符串比较

{

char *ss=s,*tt=t;

while((*ss)&&(*tt))

{

ss++;tt++; }

if(*tt) return(t);

else return(s);

}

main(){

char a[20],b[10],*p,*q;

int i;

printf("Input 1th string:");

gets(a);

printf("Input 2th string:");

gets(b);

printf("%s\n",fun(a,b)); //打印结果

system("pause");

}

</number<<endl;

网站数据信息

"编写strcmp函数,C语言编程strcmp函数的问题"浏览人数已经达到21次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:编写strcmp函数,C语言编程strcmp函数的问题的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!