码农谷坑爹的和以前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;
}