实现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;
}