写一个函数,实现两个字符串的比较,即自己编写strcmp函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了写一个函数,实现两个字符串的比较,即自己编写strcmp函数相关的知识,希望对你有一定的参考价值。

strcmp(char *s1,char *s2),如果s1=s2,返回值0,若s1<>s2,返回它们二者第一个不同字符的ASCII码差值,如果s1>s2,则输出正数,返回输出负数。如”this”与”the”,第一个不同的字符是”i”与”e”之差为4,返回值4。

#include <stdio.h>
#define N 4
int strcomp(char *s1,char *s2)
for(;*s1==*s2&&*s1&&*s2;s1++,s2++); /* 找不同的字符 */
return(*s1-*s2); /* 返回字符差值*/

void main()
char str[N][50];
int i,j;
for(i=0;i<N;i++)
printf("String #%d:",i+1);
gets(str[i]);

for(j=0,i=1;i<N;i++)
if(strcomp(str[j],str[i])>0) j=i;
printf("Min string is:%s\n",str[j]);
参考技术A 3137333的程序有问题,应是:
int strcmp(char *s1, char *s2)

while((*s1==*s2)&&*s1) s1++;s2++;
return(*s1-*s2);

原来程序返回的是不相同字符的下一字符的差值!
参考技术B #include <stdio.h>
int strcmp(char *s1, char *s2)

while((*s1++ == *s2++)&& *s1);
return (*s1 - *s2);

void main()

char a[10], b[10];
gets(a);
gets(b);
printf("%d\n", strcmp(a, b));
本回答被提问者和网友采纳
参考技术C strcmp源码
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 );
参考技术D int
*strcmp(const
char
*s1,
const
char
*s2)

for(;
*s1==*s2;
s1++,
s2++)
if(*s1
==
'\0')
return
0;
return
((unsigned
*)*s1
<
(unsigned
*)*2
?
-1
:
+1);

C++ 写一个函数,实现两个字符串的比较,即自己写一个strcmp函数

写一个函数,实现两个字符串的比较,即自己写一个strcmp函数,函数原型为int strcmp(char*p1,char*p2);设p1指向字符串s1,p2指向字符串s2,,要求s1 = s2时,返回值为0,若s1≠s2,返回它们二者第一个不同字符的ASCⅡ码差值,如果s1>s2, 则输出正值,如果s1<s2, 则输出负值。
我的代码:
#include<iostream>
using namespace std;

int strcmp(char*p1, char*p2)

int i = 0;
for (; p1[i] != '\0'; i++);
int q = 0;
for (; p2[q] != '\0'; q++);
if (i == q)
return 0;
else
return(int(p1[0] - p2[0]));


void main()

char *p=NULL, *q=NULL;
while (cin >> p >> q)

cout << strcmp(p, q);

system("pause");



请问错在哪里为什么运行不出来?

int strcmp(char*p1, char*p2)

int i = 0;
for (; p1[i] != '\0'; i++);
int q = 0;
for (; p2[q] != '\0'; q++);
if (i == q) //你这样只是比较了两个字符串的字符数是否一样,而不是比较字符是否一样
return 0;
else
return(int(p1[0] - p2[0]));



正确的应该如下:
int strcmp(char*p1, char*p2)

int i = 0;
for (; p1[i] != '\0'; i++) ; // 这个循环只是求出字符串P1的长度
int q=0;
for (; p2[q] != '\0'; q++)
if(q>i) return (int)P2[q]; //如果P2比P1长,则返回P2超过P1的第1个字符的ASCII码
if (P1[q]!= P2[q]) return (int)(p1[q] - p2[q]); //如果在q个字符P1不等于P2,返回ASCII码差

/*如果两个字符串都检测结束了,还没有发现不同字符那就要比较两个字符串长度是否一样*/

if(i==q) return 0;
else return (int)P1[q+1]; //如果字符串P1比P2长,打出P1比P2长出来的第1个字符

自己直接写的,没上机验证,你自己验证一下,如果不清楚可以加我QQ20428920,希望可以帮到你。
如果觉得回答对你有帮助,望采纳。
参考技术A

好复杂的样子,vc运行库或者 glibc库中 都有 strcmp的源码,你最好看看那些源码砸写的,再和你这个对比下子。。真的。。。

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 );


看到没,简洁吧。。

参考技术B 你只比较了第一个字符和字符串的长度,结果肯定是错的了 参考技术C //你的循环体根本就没起作用,其实就是简单用指针遍历真个字符数组,找到第一个不相同的字符,它们的ASCII的差就是返回值
参考代码如下,最好自己动手写哈
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <iostream>
using namespace std;

int strcmp(char*p1,char*p2)

while(p1!=NULL && p2 != NULL)

while(*p1 == *p2 && *p1 != '\\0' && *p2 != '\\0') 

p1++;
p2++;

return *p1 - *p2;

return 0;


int  main(void)

char s1[] = "abfghi";
char s2[] = "abfe";
printf("%d\\n", strcmp(s1,s2));
return 0;

本回答被提问者采纳

以上是关于写一个函数,实现两个字符串的比较,即自己编写strcmp函数的主要内容,如果未能解决你的问题,请参考以下文章

C++ 写一个函数,实现两个字符串的比较,即自己写一个strcmp函数

写一些函数,实现两个字符串的比较,即自己写一个strcmp函数,函数原型为int strcmp(c

用一个函数实现两个字符串的比较,即自己写一个strcmp函数,函数原型为 :int strcmp

自己编写的str操作函数

编写一个自己的库函数strcmp(),用来实现实现两个字符串的比较

C语言问题 编写一程序将两个字符串连起来