strcmp函数怎么写?
本帖最后由 风之残月 于 2014-11-9 22:35 编辑#include <iostream>
using namespace std;
int my_strcmp(char* s1, char* s2)
{
int ss1 = 0;
int ss2 = 0;
for(int i = 0; i != '\0'; ++i)
{
ss1 += s1;
ss2 += s2;
}
if(ss1 < ss2)
{
return -1;
}
if(ss1 > ss2)
{
return 1;
}
if(ss1 == ss2)
{
return 0;
}
}
int main()
{
char s1[] = "a";
char s2[] = "b";
int result = my_strcmp(s1,s2);
cout<<result<<endl;
return 0;
}
int my_strcmp(char* s1, char* s2)
{
while(*s1 != '\0' && *s2 != '\0')
{
if(*s1 > *s2) return 1; // s1 > s2
if(*s1 < *s2) return -1 ; // s2 < s1
s1++;
s2++;
}
if(*s1 != '\0') return 1;
if(*s2 != '\0') return -1;
return 0;
} 函数首部加上assert比较好
int strcmp(const char *dest, const char *source){
assert((NULL != dest) && (NULL != source));
while (*dest && *source && (*dest == *source)) {
dest ++;
source ++;
}
return *dest - *source;
} 如果输入是2个NULL 是不是应该崩溃了应该先判断 elvo 发表于 2014-9-25 09:46
{:7_122:}我之前那段代码是哪里错了哦~ get it ~ 错误出在10行的for循坏判断条件不是 i != '\0'。你知道应该怎么修改的
还有比较字符串的大小,应该是首先比较第一个字符,若相等再比较第二个字符,依次下去。。
你的程序是将所有的字符值加起来比较,例如字符串"aa"和字符串"b"就得出了第一个字符串大于第二个字符,这就不是strcmp,但如果你要满足一些特殊的需求,也可以这样实现 elvo 发表于 2014-9-27 11:03
错误出在10行的for循坏判断条件不是 i != '\0'。你知道应该怎么修改的
还有比较字符串的大小,应该是 ...
{:7_139:}哦,谢谢~ 我基础好差呀,你不说还没看出来~ for语句 判断条件错误啊 i一开始就等于‘\0’for循环都进不去 进去加个标志位 判断两个数 s1和s的结束位置 还有累加不是好办法啊 一旦数据够长 ss1或则ss2 都可能溢出了 最好是做减法再累加 char *a char*b 判断都不为空,然后指针同时指向第一个字符判断 如果ascii值相同指针推进 如果不同就返回1或-1 如果都到最后还找不出不同就返回0, 微软自己的代码实现
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 );
}
仰望天上的光 发表于 2014-10-4 18:04
函数首部加上assert比较好
{:7_139:}谢谢您,小仙要努力学,不能辜负您的指导~
页:
[1]