| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1127 人关注过本帖
标题:写了一个strcmp函数,但是觉得太大,不好,有没有很简单的程序?
只看楼主 加入收藏
xdh0817
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:193
专家分:195
注 册:2011-10-20
结帖率:92.86%
收藏
已结贴  问题点数:20 回复次数:12 
写了一个strcmp函数,但是觉得太大,不好,有没有很简单的程序?
#include<stdio.h>
#include<string.h>
int process(char  *p1, char *p2)
{
    int i,min,k=0;
    if(strlen(p1)!=strlen(p2))
    {
      if(strlen(p1)<strlen(p2))
      {  k=0;
         min=strlen(p1);
      for(i=0;i<=min-1;i++)
      {
      if(*(p1+i)>*(p2+i)) { return (1); break;}
      else if(*(p1+i)<*(p2+i)) { return(-1); break;}
            else  k++;
      }
    if(k==min) return(-1);
   
      }
      else {
               k=0;
             min=strlen(p2);
          for(i=0;i<=min-1;i++)
            {
              if(*(p1+i)>*(p2+i)) { return (1); break;}
                 else if(*(p1+i)<*(p2+i)) { return(-1); break;}
                      else  k++;
            }
            if(k==min) return(1);
             }
    }
   
    else{
              k=0;
             min=strlen(p2);
          for(i=0;i<=min-1;i++)
            {
              if(*(p1+i)>*(p2+i)) { return (1); break;}
                 else if(*(p1+i)<*(p2+i)) { return(-1); break;}
                      else  k++;
            }
            if(k==min) return(0);
    }
    return 0;
}
void main()
{
 int y;
 char a[100],b[100],*p1,*p2;
 gets(a);
 gets(b);
 p1=a;p2=b;
 y=process(p1,p2);
 printf("%d\n",y);
}
搜索更多相关主题的帖子: include process return 
2011-11-08 17:14
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:7 
嗯,写的确实有点复杂了。要多利用字符串本身的特性。
程序代码:
int strcmp(char * a, char * b)
{
    int i;
    for(i = 0; b[i] != '\0' && a[i] == b[i]; i++);
    return a[i] - b[i];
}

重剑无锋,大巧不工
2011-11-08 17:26
xdh0817
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:193
专家分:195
注 册:2011-10-20
收藏
得分:0 
回复 2楼 beyondyf
回帖要负责任!
2011-11-08 17:51
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
什么情况?你想要的strcmp函数我都写给你了,我还需要负什么责任?

重剑无锋,大巧不工
2011-11-08 18:01
鑫乐源
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:27
专家分:150
注 册:2011-10-20
收藏
得分:7 
这是极度精简的,费了我脑力。
程序代码:
int strcmp(char* a, char* b)
{
int i;
for (;!(i=*a-*b)&&*a&&*b; ++a,++b);
return i;
}

不要和编译器比智商。
2011-11-08 18:05
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 5楼 鑫乐源
呵呵,不错

重剑无锋,大巧不工
2011-11-08 18:10
心灵百合
Rank: 5Rank: 5
等 级:职业侠客
帖 子:215
专家分:367
注 册:2011-3-30
收藏
得分:7 
#include"stdio.h"

int _strcmp(char *str1,char *str2)
{
    for(;*str2!='\0',*str2!='\0';str1++,str2++)
        if(*str1!=*str2)
            break;
        
    return (*str1-*str2);
}


void main()
{
    char str1[80],str2[80];
    int temp;

    printf("\n请输入字符串1:");
    gets(str1);
    printf("\n请输入字符串2:");
    gets(str2);
    temp=_strcmp(str1,str2);

    if(temp<0)
        printf("\n%s < %s",str1,str2);
    else if(temp==0)
        printf("\n%s = %s",str1,str2);
    else
        printf("\n%s > %s",str1,str2);

    printf("\n");
}
2011-11-08 18:52
xdh0817
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:193
专家分:195
注 册:2011-10-20
收藏
得分:0 
,,,
2011-11-08 18:57
xdh0817
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:193
专家分:195
注 册:2011-10-20
收藏
得分:0 
回复 7楼 心灵百合
for(;*str2!='\0',*str2!='\0';str1++,str2++)
第一个分号前边不省略,那么可以是什么?
'\0'理解成是换行的意思吧?但是空格不也是'\0'吗?为什么遇到空格没有结束for循环呢?
2011-11-08 19:04
鑫乐源
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:27
专家分:150
注 册:2011-10-20
收藏
得分:0 
for(;*str2!='\0',*str2!='\0';str1++,str2++)

逗号运算符不是在哪都可以,这明显是个错误。逻辑错误。

不要和编译器比智商。
2011-11-08 19:07
快速回复:写了一个strcmp函数,但是觉得太大,不好,有没有很简单的程序?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017941 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved