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

作者&投稿:里姣 (若有异议请与网页底部的电邮联系)
有两个字符串,利用函数实现两个字符串的链接,两个字符串比较大小,计算两个字符串的长度,将第二个字符~

char * mystrcat(char *str1, char *str2) { if((str1==NULL)||(str2==NULL)) return NULL; char *pt = str1; while(*str1!='\0') str1++; while(*str2!='\0') *str1++ = *str2++; *str1 = '\0'; return pt; } int mystrcmp(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 ; return( ret ); } int myStrlen(const char *str)   {  if(str==NULL) return 0;  int len = 0;  for(; *str++ != '\0'; )  {  len++;  }  return len;  }char * mystrcpy (char * dst, char * src)  {  char * cp = dst;  while( *cp++ = *src++ )  ;   return( dst );  }

最简实现:
/*严格来说这里原型应该是int strcmp(const cahr*, const char*);更好一些。*/
int strcmp (char* p1, char* p2)
{
while(*p1 && *p2 && *p1 == *p2)
{
++p1;
++p2;
}
return *p1 - *p2;
}
另外,LS错误:C/C++中不等号是!=,不是;此外,不符合LZ给的题意(实现的是memncmp的半成品- -...);void main不符合标准……
====
[原创回答团]

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,希望可以帮到你。
如果觉得回答对你有帮助,望采纳。

好复杂的样子,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
", strcmp(s1,s2));
return 0;
}


你只比较了第一个字符和字符串的长度,结果肯定是错的了


邻水县15386242214: 用c++编写程序,实现俩个字符串赋值的函数,并把一个字符串插到另一个字符串的
拓苛协达: 这个就是strcat()函数的功能,这里有个例子你可以参考一下:char *strcat(char *strDes, const char *strSrc) { assert((strDes != NULL) && (strSrc != NULL)); char *address = strDes; while (*strDes != '\0') ++ strDes; while ((*strDes ++ = *strSrc ++) != '\0') NULL; return address;}

邻水县15386242214: c++中 写一个两个字符串相连接的函数:char *strcat(char *s1,const char *s2) 其作用是将s2接到s1的末端 -
拓苛协达: #include <iostream.h> char *strcat(char *s1, const char *s2) { char *p; p = s1; while(*p) p++; while(*p++ = *s2++); return s1; } int main() { char s1[10] = "abc"; char s2[4] = "123"; char *p = strcat(s1, s2); cout << p << endl; return 0; }

邻水县15386242214: 用C++编写2个字符串相接
拓苛协达: 有一种字符串连接函数strcat 用法如下: strcat(str1,str2) 其中str1和str2可以是字符串指针或者字符串数组 预处理命令应包含: #include"string.h"

邻水县15386242214: 编写函数,实现两个字符串的连接,并将连接后的结果存放在第一个字符串中? -
拓苛协达: #include "stdio.h" void sappend(char *a,char *b) { while(*a)a++; while(*a++=*b++); }main() { char t[80],s[80]; puts("输入第一个字符串:"); gets(s); puts("输入第二个字符串:"); gets(t); sappend(s,t); puts("结果是:"); puts(s); }其实写这个没什么意思,因为C已经有标准的库函数了,在String.h里,有Strcat函数,直接就完成了.

邻水县15386242214: C++编程:重载“+”运算符实现两个字符串的连接 -
拓苛协达: #include <iostream.h> #include <assert.h> char*mystrcpy(char *strDest , const char *strSrc){assert((strDest!=NULL) && (strSrc!=NULL));char *temp = strDest;while((*strDest++ = *strSrc++)!='\0');return temp;} int mystrlen(const char *array) {int...

邻水县15386242214: c++ 打出与strcpy函数一样功能的语句 就是将两个字符串连在一起 -
拓苛协达: 很简单呀:string cat_string(string s1,const string s2) { s1=s1+s2; return s1; } C++中这样写这个函数就可以替代strcat库函数了.int main(void) {string s1("hehe"); string s2("ni hao!"); string s3=cat_string(s1,s2); cout return 0; } 测试结果:

邻水县15386242214: 用c语言编写一个将两个字符串连接起来函数两个字符串由主函数输入, 连接后的字符串也由主函数输出. -
拓苛协达: #include<stdio.h> void main() {void con(char sting1[],char sting2[],char sting3[]);char s1[20],s2[20],s3[40]; printf("Input sting1: ");scanf("%s",s1);printf("Input sting2: ");scanf("%s",s2);con(s1,s2,s3);printf("%s\n",s3); } void con(...

邻水县15386242214: C++设计一个比较两个字符串的函数int cmpstr(const char* str1, const char* str2),
拓苛协达: int cmpstr(const char *str1, const char *str2) { int i=0; for(i=0; str1[i] != '\0' &amp;&amp; str2[i] != '\0' ; i++) { if(str1[i] &gt; str2[i]) return 1; else if(str1[i] &lt; str2[i]) return -1; } if(str1[i] == '\0' &amp;&amp; str2[i] != '\0') return -1; else if(str1[i] != '\0' &amp;&...

邻水县15386242214: C++字符串交换,交换两个不同长度的字符串指针,分别输出之.要求:用函数调用的方式来实现.主函数中定义两个字符串,然后调用交换函数.如将:x=“I ... -
拓苛协达:[答案] #include #include using namespace std;int main(){ string str1, str2; int n, ...

邻水县15386242214: 编程实现两字符串连接C++ -
拓苛协达: 既然楼上用了while 那么我也用下把 来个更简洁的#include <iostream> using namespace std; int main() { char str_a[32] = "Hello!"; char str_b[16] = "www.baidu.com"; int i=0, j=0; while(str_a[i++]); i--; while(str_a[i++]=str_b[j++]); cout << str_a << endl; return 0; }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网