字符串排序-大写后排程序

这是效果图,前面是个原字符串,随机生成,后面是排序后的字符串,将大写字母后排,保证相对位置不变。以为是代码:
#include"test_char_exchange.h"
#include
#include

int isup(char c)
{return c>='A'&&c<='Z'?1:0;}
void swap(char *c1,char *c2)
{int t=*c1;*c1=*c2;*c2=t;}

int exchange(char*cs,int f,int r)//返回大写字母个数
{
	if(f==r)return isup(cs[f]);
	int m=(f+r)/2;
	int k1=exchange(cs,f,m);//前半部分排序
	int k2=exchange(cs,m+1,r);//后半部分排序
	if(k1>0&&k2m-b+1&&m>=b)//如果后半部分字符串更长
			{
				int temp=m;//记下前半部分字符串的终点
				while(m>=b)swap(&cs[m--],&cs[e--]);//将cs[b:m]部分交换到cs[……:e]
				m=temp;//恢复前半部分终点
			}
			while(e-m=b)//如果后半部分更短
				swap(&cs[m--],&cs[e--]);//将后半部分字符串交换到前半部分的末端
		}
		while(m>=b)swap(&cs[m--],&cs[e--]);//两字符串长度相等,可以依次交换
	}
	return k1+k2;
}

#define MLEN 1024
int test()
{
	char cs[MLEN+1]="";
	for(int k=0;k<1;k++)
	{
		for(int j=0;j50)
				cs[j]=m%25+'a';
			else
				cs[j]=m%25+'A';
		}
		printf("\n %s \n",cs);
		exchange(cs,0,MLEN-1);
		int p=0,q=MLEN-1;
		while((!isup(cs[p]))&&p=0)q--;
		if(p-q!=1)return 0;
		printf("\n %s \n",cs);
	}
	return 1;
}

 
 
 
 
 

你可能感兴趣的:(字符串排序-大写后排程序)