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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;

本回答被提问者采纳

c语言编程 写一个函数,实现两个字符串的比较,即写一个类似于strcmp功能的函数。急求,谢谢!

函数原型为: int strcompare(char *p1,char *p2)
设p1指向字符串s1,p2指向字符串s2。要求:当s1=s2时,返回值为0。当s1不等于s2时,返回它们二者的第一个不同字符的ASCII码差值(如“BOY”与“BAD”,第二字母不同,“O”与“A”之差为79-65=14);即如果s1>s2,则输出正值;如果s1<s2,则输出负值。
注意:有程序前缀
例如:
输入:
CHINA↙
Chen↙
输出:
-32
前缀代码:
#include <stdio.h>
int strcompare (char *p1,char *p2);

#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));
参考技术A #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]);
参考技术B #include <stdio.h>
int strcompare (char *p1,char *p2);
int main()
    char p1[100],p2[100];
    int ans;
    gets(p1);
    gets(p2);
    ans = strcompare(p1,p2);
    printf("%d\\n",ans);
    return 0;

int strcompare (char *p1,char *p2)
    int i;
    for(i=0;p1[i]!='\\0' && p2[i]!='\\0';i++)
        if(p1[i]==p2[i]) continue;
        else return (p1[i]-p2[i]);
    
    if(p1[i]=='\\0' && p2[i]=='\\0') return 0;
    else if(p1[i]=='\\0') return -p2[i];
    else return p1[i];

参考技术C 3137333的程序有问题,应是:
int strcmp(char *s1, char *s2)

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

原来程序返回的是不相同字符的下一字符的差值!
参考技术D #include <stdio.h>
int strcompare(char *p1, char *p2);
int main()

char s1[100];
char s2[100];
gets(s1);
gets(s2);
printf("%d\\n", strcompare(s1, s2));
system("pause");

int strcompare(char *p1, char *p2)

for (; *p1 == *p2&&*p1; p1++, p2++);
return *p1 - *p2;

本回答被提问者采纳

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

求教,c语言 写一个函数,实现两个字符串的比较。即自己写一个strcmp函数

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

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

c语言编程 写一个函数,实现两个字符串的比较,即写一个类似于strcmp功能的函数。急求,谢谢!

写一个strcmp函数,实现两个字符串的比较。 求注释。ORZ!

自己写一个strcmp函数