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

Posted

tags:

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

写一些函数,实现两个字符串的比较,即自己写一个strcmp函数,函数原型为int strcmp(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,则输出负值。 )

参考技术A int mystrcmp(char *p1,char *p2)
int i=0;
while(p1[i] && p2[i] && p1[i]==p2[i])
i++;
return p1[i]-p2[i];

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函数,函数原型为int strcmp(c的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

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

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

自己写一个strcmp函数