| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 516 人关注过本帖
标题:字符串整理问题(编了好多程序,这个程序难住了,请高手指点一下!)
只看楼主 加入收藏
纪昌武
Rank: 1
等 级:新手上路
帖 子:8
专家分:7
注 册:2010-11-2
结帖率:33.33%
收藏
已结贴  问题点数:20 回复次数:6 
字符串整理问题(编了好多程序,这个程序难住了,请高手指点一下!)
    将形如 A4A2Z9Q7Q5A3B3B4A7 的字符串,整理成形如 A2-4A7B3-4Q5Q7Z9 的字符串。

整理规则:如果有若干个对的字母相同,且数字是连续的,例如有A1B2A2A4A3字符串,其中A1,A2,A3,A4,四对的字母相同,并且数字是连续的,可以将其合并,即在此字母后用'-'标出数字的范围,例如上述四对可以合并成A1-4。然后再以字母为主序,以数字为次序进行了升序排序。
搜索更多相关主题的帖子: 字符 难住 
2010-11-02 22:27
someday
Rank: 3Rank: 3
来 自:保定
等 级:论坛游侠
帖 子:83
专家分:116
注 册:2010-10-8
收藏
得分:5 
用结构体应该能实现
struct
{
char ch;
int n;
}
然后定义结构体的数组
2010-11-02 22:50
cacker
该用户已被删除
收藏
得分:5 
提示: 作者被禁止或删除 内容自动屏蔽
2010-11-02 23:41
makebest
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:658
专家分:962
注 册:2005-3-17
收藏
得分:5 
花了一个小时搞定了:
程序代码:
#include "stdafx.h"
#include "ctype.h"
struct obj1
{
    int i;
    obj1 *next;
};
struct obj2
{
    char a;
    obj1 * head;
};
void AddNumber(obj2* obj, char num)
{
    if(isdigit(num))
    {
        int n = num-'0';

        obj1 *last = NULL;
        obj1 *next = obj->head;

        while(next!=NULL)
        {
            if(next->i==n)
                return;

            if(next->i > n)
            {
                break;
            }
            last = next;
            next = next->next;
        }

        obj1 *oo = new obj1();
        oo->i = n;
        oo->next = next;

        if(obj->head==NULL || last==NULL)
        {
            obj->head = oo;
        }
        else
        {
            last->next = oo;
        }
    }
}
void Display(char a, obj1 *oo)
{
    int n = oo->i;
    int n2 = n;
    while(oo->next!=NULL)
    {
        if(oo->next->i!=n2+1)
            break;
        oo = oo->next;
        n2 = oo->i;
    }
    if(n==n2)
    {
        printf("%c%d",a,n);
    }
    else
    {
        printf("%c%d-%d",a,n,n2);
    }
    if(oo->next!=NULL)
    {
        Display(a, oo->next);
    }
}
void Process(char *str)
{
    const int MAX=26;
    obj2 data[MAX];
    int i, j;
    for(i=0;i<MAX;i++)
    {
        data[i].a = 'A'+i;
        data[i].head = NULL;
    }
    for(i=0;str[i]!=0 && str[i+1]!=0;i+=2)
    {
        for(j=0;j<MAX;j++)
        {
            if(data[j].a==str[i])
            {
                AddNumber(data+j, str[i+1]);
            }
        }
    }
    for(i=0;i<MAX;i++)
    {
        if(data[i].head!=NULL)
        {
            Display(data[i].a, data[i].head);
        }
    }
}
int _tmain(int argc, _TCHAR* argv[])
{
    Process("A4A2Z9Q7Q5A3B3B4A7");
    return 0;
}

2010-11-02 23:44
帝国
Rank: 3Rank: 3
来 自:云南昆明
等 级:论坛游侠
帖 子:68
专家分:144
注 册:2010-10-11
收藏
得分:5 
这个程序有点意思,一直序列里以存在某种排序规则,如数字本身就是升序排序,可以使用多个队列来实现
2010-11-03 10:20
纪昌武
Rank: 1
等 级:新手上路
帖 子:8
专家分:7
注 册:2010-11-2
收藏
得分:0 
回复 4楼 makebest
谢谢啊!我几乎想了一天,没什么收获!你的思路很清晰,是我茅塞顿开!出于对编程的爱好,我会继续探索看有没有其他的方法!
2010-11-03 18:28
纪昌武
Rank: 1
等 级:新手上路
帖 子:8
专家分:7
注 册:2010-11-2
收藏
得分:0 
谢谢各位的指点!我会继续探索!
2010-11-03 18:31
快速回复:字符串整理问题(编了好多程序,这个程序难住了,请高手指点一下!)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026433 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved