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

写一个函数,实现两个字符串的比较,即自己写一个strcmp函数,函数原型为intstrcmp(char*p1,char*p2);设p1指向字符串s1,p2指向字符串s2,... 写一个函数,实现两个字符串的比较,即自己写一个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");

}

请问错在哪里为什么运行不出来?
展开
 我来答
czy7812
2015-01-15 · TA获得超过2670个赞
知道小有建树答主
回答量:518
采纳率:88%
帮助的人:190万
展开全部
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,希望可以帮到你。
如果觉得回答对你有帮助,望采纳。
匿名用户
推荐于2018-02-27
展开全部

好复杂的样子,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 );
}


看到没,简洁吧。。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友834a0a1e3
推荐于2016-10-21 · TA获得超过835个赞
知道小有建树答主
回答量:1031
采纳率:62%
帮助的人:164万
展开全部
//你的循环体根本就没起作用,其实就是简单用指针遍历真个字符数组,找到第一个不相同的字符,它们的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;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
478617
2015-01-15 · TA获得超过875个赞
知道小有建树答主
回答量:725
采纳率:100%
帮助的人:95.9万
展开全部
你只比较了第一个字符和字符串的长度,结果肯定是错的了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式