有一个由大小写组成的字符串,现在需要对他进行修改,将其中的所有小写字母排在大写字母的前面(大写或小写字母之间不要求保持原来次序),如有可能尽量选择时间和空间效率高的算法。
c语言函数原型void proc(char *str),也可以采用你自己熟悉的语言。
#include<iostream.h>
/*
设置两个变量i和j分别从字符串开始和结尾处开始查找,i查找到大写字母停止,j查找到小写字母停止
然后判断i是否小于j,如果是的话就交换在i位置和j位置的字母
交换的时候继续判断i和j的值是为了防止在while是判断后 fG这种情况,i判断f位置小写,i加1,
j判断G位置大写,j减1,这样再交换就错误了
*/
void proc(char *str)
{
int num=0;
while(*(str+num)!='\0')
num++;
int i=0,j=num-1;
while(i<j)
{
while(*(str+i)>='a'&&*(str+i)<='z')
i++;
while(*(str+j)>='A'&&*(str+j)<='Z')
j--;
if(i<j)
{
char tmp;
tmp=*(str+i);
*(str+i)=*(str+j);
*(str+j)=tmp;
}
}
cout<<str<<endl;
}
void main()
{
char str[]="aBdfAsgOqwC";
proc(str);
}