码农谷题目之将字符串中的字符按规则重新排列

码农谷坑爹的和以前OJ有点区别就是你不能while循环读取,只能一个进程做一题,因为这个就花了好长时间,以下是AC的C代码:

#include <stdio.h>
#include <string.h>

#define VALUE(p,i,v) \
    if(p[i] >= 'A' && p[i] <= 'Z') \
    { \
        v = p[i] - 'A'; \
    } \
    else if(p[i] >= 'a' && p[i] <= 'z') \
    { \
        v = p[i] - 'a'; \
    }
#define IS_NORMAL(p,i) ((p[i] >= 'A' && p[i] <= 'Z') || (p[i] >= 'a' && p[i] <= 'z'))
void sort(char* line)
{
    short len = strlen(line);
    char t1 = 0,t2 = 0;
    short i,j,e,t3;
    i = 0;
    while(i < len && !IS_NORMAL(line,i)){ i ++; }
    e = len - 1;
    while(e >= 0 && !IS_NORMAL(line,e)){e --;}
    for(;i <= e;i ++)
    {
        while(i <= e && !IS_NORMAL(line,i)){ i ++; }
        for(j = e; j > i; j --)
        {
            while(j > i && !IS_NORMAL(line,j)){j --;}
            VALUE(line,j,t1);
            t3 = j - 1;
            while(t3 > i && !IS_NORMAL(line,t3)){t3 --;}
            VALUE(line,t3,t2);
            if(t2 > t1)
            {
                t1 = line[j] ;
                line[j] = line[t3];
                line[t3] = t1 ;
            }
        }
    }
}

int main()
{
    char szLine[1002] = {0};
    gets(szLine);
    sort(szLine);
    puts(szLine);
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值