比较两个字母数字字符串 [英] compare two alphanumeric string

查看:165
本文介绍了比较两个字母数字字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要比较字符串到下面的方式。任何人都可以提供我一些洞察或算法在c ++。
例如:

I need to compare string into following way. Can anyone provide me some insight or algorithm in c++. For example:

 "a5" < "a11"        - because 5 is less than 11
 "6xxx < 007asdf"    - because 6 < 7
 "00042Q < 42s"      - because Q < s alphabetically
 "6   8" < "006 9"   - because 8 < 9


推荐答案

我假设您想要比较按以下顺序完成:数字在1-9范围内;数字值;位数;

I'm assuming that you want the compare to be done in this order: presence of digits in range 1-9; value of digits; number of digits; value of the string after the digits.

它在C中,但你可以很容易地将其转换为使用C ++ std :: string类。

It's in C, but you can easily transform it into using the C++ std::string class.

int isdigit(int c)
{
    return c >= '1' && c <= '9';
}

int ndigits(const char *s)
{
    int i, nd = 0;
    int n = strlen(s);

    for (i = 0; i < n; i++) {
        if (isdigit(s[i]))
            nd++;
    }
    return nd;
}

int compare(const char *s, const char *t)
{
    int sd, td;
    int i, j;

    sd = ndigits(s);
    td = ndigits(t);

    /* presence of digits */
    if (!sd && !td)
        return strcasecmp(s, t);
    else if (!sd)
        return 1;
    else if (!td)
        return -1;

    /* value of digits */
    for (i = 0, j = 0; i < sd && j < td; i++, j++) {
        while (! isdigit(*s))
            s++;
        while (! isdigit(*t))
            t++;

        if (*s != *t)
            return *s - *t;
        s++;
        t++;
    }

    /* number of digits */
    if (i < sd)
        return 1;
    else if (j < td)
        return -1;

    /* value of string after last digit */
    return strcasecmp(s, t);
}

这篇关于比较两个字母数字字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆