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 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);
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功能的函数。急求,谢谢!