关于自己写一个函数strcmp,实现两字符串比较的问题!

大马哈鱼 2011-05-10 07:05:41
自己写一个strcmp
思路是定义两个字符数组,数组名传入strcmp,两字符串比较。
#include <iostream>
#include <algorithm>
#include "math.h"
#include <iomanip>
#include "conio.h"
#include <string>

using namespace std;
int main(){
char str3[20], str4[20];
cin>>str3>>str4;
void mystrcmp(char *str1, char *str2);
mystrcmp(str3, str4);
return 0;
}
void mystrcmp(char *str1, char *str2){
char* p;
char* q;
int a=0,b=0,c=0;
//求出传入两个数组的长度
while(*str1!='\0'){
str1++;
a++;
}
while(*str2!='\0'){
str2++;
b++;
}
cout<<a<<' '<<b<<endl;
//将长度小的那个数组的首地址赋给指针P,长的赋给q,将长度小的数组长度赋值给c
if(a<=b){
p=str1;
cout<<p;
q=str2;
c=a;
} else{
p=str2;
q=str1;
c=b;
}
//从两个数组首元素开始比较,如果相等则比较下一个元素,直到有不相等,而且比较的次数小于等于长度较小的数组元素的个数
int n=0;
while(*(p+n)==*(q+n) && n<c-1){
n++;
cout <<n<<' ';
}
//这时n定位在两个数组不相等的那第n个元素上,那比较第n个元素的值,
if(n<c && *(p+n)<*(q+n)) cout<<p<<"<"<<q;
if(n<c && *(p+n)>*(q+n)) cout<<p<<">"<<q;
if(n==c && a<b) cout<<p<<"<"<<q;
if(n==c && a==b) cout<<p<<"=="<<q;
}

我用了cout<<p(指针指向str1)<<str1(形参指针) 但是打印出来的为空,而且while循环次数也有问题,我想请大家指出问题所在就可以了不用修改程序,这种方法是很不好,但再不好的程序也要先写完,然后再改进,我看过微软的strcmp源代码所以请大家按照我的方法指出问题就可以了,谢谢!
...全文
1700 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq120848369 2011-05-10
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

int strcmp(const char *str1,const char *str2)
{
while(*str1!=NULL && *str2!=NULL)
{
if(*str1<*str2)
{
return -1;
}
else if(*str1>*str2)
{
return 1;
}

++str1,++str2;
}

if(*str1==0 && *str2==0)
{
return 0;
}
else if(*str1==0)
{
return -1;
}
else
{
return 1;
}
}

int main()
{
cout<<strcmp("abc","abcd")<<strcmp("abc","ad")<<endl;


return 0;
}
TheLostMan丶 2011-05-10
  • 打赏
  • 举报
回复
while(*str1!='\0'){
str1++;
a++;
}//这里的写法是错误的喔,应该这样写
while(str1[a++]!='\0'){;}
while(*str2!='\0'){
str2++;
b++;
}//这里的写法也同样是错误的喔,应该这样写
while(str2[b++]!='\0'){;}
cout<<a<<' '<<b<<endl;//你的函数的目的是比较字符串,这句完全不必写,调错的时候可以用上
cout<<p;//这句话是不能输出p的整个数组的,而是输出p的地址或者是p所指数组的第一个字符
这程序,这个思想方法不太好用啊;
推荐个思想方法
就是先比较大小,字符多的串大,相等的话再逐个比较!!!
xiaoguangzaia 2011-05-10
  • 打赏
  • 举报
回复
这个楼主看看指针与数组的区别,把一个数组当做函数形参后,数组自动退化为指针
你传递的str3,str4在strcmp中是两个指针,循环计算字符个数后str1,str2都指向字符串的结束位置。
这时候你再赋值给p、q当然不行。

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧