加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

(原创)不用库函数,实现strcmp()

(2012-09-17 19:46:04)
标签:

杂谈

分类: C语言

首先我们要了解strcmp()函数用法。百度可以出来:

原型:extern int strcmp(const char *s1,const char * s2);

  功能:比较字符串s1和s2。

  一般形式:strcmp(字符串1,字符串2)

  说明:

  当s1<0

  当s1=s2时,返回值=0

  当s1>s2时,返回值>0

  即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。

 

那我们可以构造这个子函数:

         // strcmp.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include
#include

 

int mystrcmp(char *str1,char *str2)
{
 while((*str1 != '\0')&&(*str2 != '\0'))
 {

  if(*str1==*str2)
  {
   str1++;
   str2++;

  }


  else
  {
   if ((*str1-*str2)>0)
  
   return 1;


   if ((*str1-*str2)<0)
     
   return -1;
  }

 }

 

 if((*str1 != '\0')&&(*str2 == '\0'))
 {
  return 1;
 }

   else if ((*str1 == '\0')&&(*str2 != '\0'))
 {
  return -1;
 }

   else

   {
      return 0;
 }

 

 }

 

子函数的形参是两个指向字符的指针,在函数调用后为字符串的头指针,在while中的条件是判断两个字符串的指针不为0,从字符串的首字母开始判断,如果,两个字符串的首字母相同,则比较下一个,如果不同,需要判断,如果第一个字符串的字符的ASCLL大于第二个字符串的,输出1,反之,输出-1。

 但是这只是两个字符串个数相等的情况。比如"abc"和"abd"。程序输出-1,"abc"和"abc"输出0。但是如果两个字符串的个数不同呢?比如"ab"和"abcd",这时要加上

   if((*str1 != '\0')&&(*str2 == '\0'))
    {
       return 1;
    }

     else if ((*str1 == '\0')&&(*str2 != '\0'))
   {
     return -1;
    }

如果第一个字符串没结束,第二个结束了,肯定第一个大,故输出1,反之输出-1。

 

在主函数中调用:

    
void main()
{

  char *str1 = "adcde";
  char *str2 = "adcde";

  printf("%d\n",mystrcmp(str1,str2));


}

测试与库函数功能一样。

 

注意:如果两个字符串分别为"abr"和"abcde",应该输出多少呢?

其实在while()中,当比较第二个字符'r'和'c'的时候,判断r的ASCLL大于c的,return 1,跳出子函数,后面的不会再比较了。如定义说的:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。


 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有