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");
}
请问错在哪里为什么运行不出来? 展开
我的代码:
#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");
}
请问错在哪里为什么运行不出来? 展开
4个回答
展开全部
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,希望可以帮到你。
如果觉得回答对你有帮助,望采纳。
{
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 );
}
看到没,简洁吧。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
//你的循环体根本就没起作用,其实就是简单用指针遍历真个字符数组,找到第一个不相同的字符,它们的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;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你只比较了第一个字符和字符串的长度,结果肯定是错的了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询