拈花小仙 发表于 2014-9-25 09:46:46

strcmp函数怎么写?

本帖最后由 风之残月 于 2014-11-9 22:35 编辑

#include <iostream>

using namespace std;

int my_strcmp(char* s1, char* s2)
{
    int ss1 = 0;
    int ss2 = 0;

    for(int i = 0; i != '\0'; ++i)
    {
      ss1 += s1;
      ss2 += s2;
    }
    if(ss1 < ss2)
    {
      return -1;
    }
    if(ss1 > ss2)
    {
      return 1;
    }
    if(ss1 == ss2)
    {
      return 0;
    }
}

int main()
{
    char s1[] = "a";
    char s2[] = "b";

    int result = my_strcmp(s1,s2);

    cout<<result<<endl;

    return 0;

elvo 发表于 2014-9-25 09:46:47

int my_strcmp(char* s1, char* s2)
{
    while(*s1 != '\0' && *s2 != '\0')
    {
                   
            if(*s1 > *s2) return 1;                 // s1 > s2
            if(*s1 < *s2) return -1 ;         // s2 < s1
            s1++;
            s2++;
    }
    if(*s1 != '\0') return 1;
    if(*s2 != '\0') return -1;
    return 0;
}

仰望天上的光 发表于 2014-10-4 18:04:27

函数首部加上assert比较好

int strcmp(const char *dest, const char *source){
   assert((NULL != dest) && (NULL != source));
   while (*dest && *source && (*dest == *source)) {
                   dest ++;
                   source ++;
   }
   return *dest - *source;
}

三寸半 发表于 2014-9-27 10:42:18

如果输入是2个NULL 是不是应该崩溃了应该先判断

拈花小仙 发表于 2014-9-27 10:53:23

elvo 发表于 2014-9-25 09:46


{:7_122:}我之前那段代码是哪里错了哦~

墨白_找 发表于 2014-9-27 10:57:07

get it ~

elvo 发表于 2014-9-27 11:03:25

错误出在10行的for循坏判断条件不是 i != '\0'。你知道应该怎么修改的

还有比较字符串的大小,应该是首先比较第一个字符,若相等再比较第二个字符,依次下去。。
你的程序是将所有的字符值加起来比较,例如字符串"aa"和字符串"b"就得出了第一个字符串大于第二个字符,这就不是strcmp,但如果你要满足一些特殊的需求,也可以这样实现

拈花小仙 发表于 2014-9-27 11:05:59

elvo 发表于 2014-9-27 11:03
错误出在10行的for循坏判断条件不是 i != '\0'。你知道应该怎么修改的

还有比较字符串的大小,应该是 ...

{:7_139:}哦,谢谢~ 我基础好差呀,你不说还没看出来~

小甲鱼_大徒弟 发表于 2014-10-2 08:58:47

for语句 判断条件错误啊      i一开始就等于‘\0’for循环都进不去      进去加个标志位   判断两个数 s1和s的结束位置      还有累加不是好办法啊    一旦数据够长   ss1或则ss2 都可能溢出了   最好是做减法再累加

machimilk 发表于 2014-10-2 14:45:16

char *a char*b 判断都不为空,然后指针同时指向第一个字符判断 如果ascii值相同指针推进 如果不同就返回1或-1 如果都到最后还找不出不同就返回0,

xhbuming 发表于 2014-10-4 17:19:49

微软自己的代码实现
int __cdecl strcmp (
      const char * src,
      const char * dst
      )
{
      int ret = 0 ;

      while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst)
                ++src, ++dst;

      if ( ret < 0 )
                ret = -1 ;
      else if ( ret > 0 )
                ret = 1 ;

      return( ret );
}

拈花小仙 发表于 2014-10-4 18:09:31

仰望天上的光 发表于 2014-10-4 18:04
函数首部加上assert比较好

{:7_139:}谢谢您,小仙要努力学,不能辜负您的指导~

大个的糖果 发表于 2014-11-1 06:23:53

页: [1]
查看完整版本: strcmp函数怎么写?