strnumcmp的实现

实现int strnumcmp(char * str1,char * str2);函数,当两个字符串的比较部分不包含数字时,函数功能和strcmp一样。否则比较字符串中的数字大小。例如:

"abc32"<"abc6";

"abcd">"abc9";

"abcd"<"abce";

// strnumcmp.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <ctype.h>
#include <string.h>
/**
实现int strnumcmp(char * str1,char * str2);函数,当两个字符串的比较部分不包含数字时,函数功能和strcmp一样。否则比较字符串中的数字大小。例如:
"abc32"<"abc6";
"abcd">"abc9";
"abcd"<"abce";
基本思想:当前位置如果全是是数字,则计数;否则采用strcmp的方法比较
**/
int strnumcmp(char *str1,char *str2){
  
	int i,j;
	int len1=strlen(str1);
	int len2=strlen(str2);
	int int1;
	int int2;
	for(i=0,j=0;i<len1,j<len2;i++,j++){
		int1=0;
		int2=0;
	
		//当前值不等,且不全是数字,直接采用strcmp的方法
		if (str1[i]!=str2[j] && !(isdigit(str1[i]) && isdigit(str2[j])))
		{
			return str1[i]-str2[j];
		}
		//str1遇到数字,则进行迭代
		while (isdigit(str1[i]))
		{
			int1=int1*10+str1[i]-'0';
			i++;
		}
		//str2遇到数字,则进行迭代
		while (isdigit(str2[j]))
		{
			int2=int2*10+str2[j]-'0';
			j++;
		}
		
		//比较大小
		if (int1!=int2)
		{
			return int1-int2;
		}
	}
	
	return 0;
}
/************************************************************************/
/* 基础的strcmp方法                                                     */
/************************************************************************/
int strmycmp(char *str1,char *str2){
	int ret=0;
	while(!(ret=*str1-*str2))//不为0
	{
		str1++;
		str2++;
	}
	return ret;
}
int main(int argc, char* argv[])
{
	char * str1="abc123";
	char * str2="56abc12455";
	int result=strnumcmp(str1,str2);
	if(result==0)
		printf("字符串相等。/n");
	else if(result>0)
		printf("%s大于%s/n",str1,str2);
	else
		printf("%s小于%s/n",str1,str2);
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值