如何写个函数比较两个用字符串表示的整数的大小

icq9988 2004-12-03 07:38:07
如何写个函数比较两个用字符串表示的整数的大小,要优化过的,不用LENGTH等的判断,最快的写法,先谢谢了
...全文
294 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
alanzhu 2004-12-03
  • 打赏
  • 举报
回复
本人觉得对是否是数字字符的检查可以不在此函数的范围内,呵呵,愚见
alanzhu 2004-12-03
  • 打赏
  • 举报
回复
不好意思,刚才没看见260005065(懒在床上不起) 的,我的成了他的冗余版了
alanzhu 2004-12-03
  • 打赏
  • 举报
回复
int StrCmp(const char *pLhs, const char *pRhs)
{
int t[100];
int i=0;
int j = 0;
while(pLhs[i]!='\0'&&pRhs[i]!='\0')
{
t[i]=pLhs[i]-pRhs[i];
if(t[i]!=0&&j==0)
j=t[i];
if(++i>=100)
return 100;
}
if(pLhs[i]=='\0'&&pRhs[i]=='\0')
return j;
else if(pLhs[i]=='\0')
return -1;
else
return 1;
}
xdspower 2004-12-03
  • 打赏
  • 举报
回复
最好是用liujingfu123(Oh_My_GoD)的方法,毕竟字符串不一定都是表示整数的。
BlackEagle_ 2004-12-03
  • 打赏
  • 举报
回复
chenqing1128(逃兵)的代码会使得 0002>23

//把字符串转换成整数
int string2int(char *s) {
int a = 0;
while(*s) {
a = a * 10 + *s - '0';
++s;
}
return a;
}

//比较,返回正数表示大于,负数表示小于,0表示等于
int cmp(char *s1, char *s2) {
return string2int(s1) - string2int(s2);
}
liujingfu123 2004-12-03
  • 打赏
  • 举报
回复
能不能用 atol() 或 atoi() 这样函数试试呢? 先把字符串转化成整数再比较………………
260005065 2004-12-03
  • 打赏
  • 举报
回复
int StrCmp(char *str1,char *str2)
{
int flag=0;
while(*str1&&*str2)
{
if(!flag && *str1!=*str2)
flag=*str1-*str2;
++str1;++str2;
}
if(*str1==*str2)
return flag;
return *str1-*str2;
}
chenqing1128 2004-12-03
  • 打赏
  • 举报
回复
int StrCmp(const char *a, const char *b)
{
if(strlen(a)>strlen(b)) return 1;
else if(strlen(a)<strlen(b))return -1;
else
{
while(a[i]!='\0'&&(a[i]==b[i]))
i++;
if(a[i]=='\0')return 0;
else if(a[i]>b[i]) return 1;
else return -1;
}

}
tsingien 2004-12-03
  • 打赏
  • 举报
回复
根据carylin(别信我,我在说谎) 的写法,似乎“3”会大于"100",根据shenailin(sal)的写法,似乎“002”会大于“30”,我觉得首先应该去掉前导空格和0,在shenailin(sal)程序的基础上改动一下就ok了
shenailin 2004-12-03
  • 打赏
  • 举报
回复
小弟不才,也来一段 !
int StrCmp(const char *pLhs, const char *pRhs)
{
int nLenL, nLenR, i;
i=0;
nLenL =0;
nLenR =0;
while(pLhs[nLenL])
nLenL ++;
while(pRhs[nLenR])
nLenR++;
if(nLenL > nLenR)
return 1;
else if(nLenL < nLenR)
return -1;
else
{
for(i=nLenR-1; i>=0; i++)
{
if(pLhs[i] > pRhs[i])
return 1;
else if(pLhs[i] < pRhs[i])
return -1;
else
continue;
}
}
return 0;
}
friedchicken2002 2004-12-03
  • 打赏
  • 举报
回复
引:carylin(别信我,我在说谎)
写的挺简洁的。
carylin 2004-12-03
  • 打赏
  • 举报
回复
int StrCmp(const string &lhs, const string &rhs)
{
if (lhs < rhs) {return -1;}
if (lhs > rhs) {return 1;}
return 0;
}
lfxzm 2004-12-03
  • 打赏
  • 举报
回复
比比看谁长,要去掉前面的零。如0004要去掉0,剩下4。

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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