有一个由大小写组成的字符串,现在需要对他进行修改,将其中的所有小写字母排在大写字母的前面(大写或小写字母之间不要求保持原来次序),如有可能尽量选择时间和空间效率高的算法。
c语言函数原型void proc(char *str),也可以采用你自己熟悉的语言。
思路:
两个指针i,j 初始i指向头,j指向尾. 从头遍历,如果为大写,将位置i,j互换同时j-1,否则i+1,直到i=j.
void proc(char *str)
{
if(*str=='\0')
return;
int i=0;
int j=strlen(str)-1;
while(i<j)
{
if(*(str+i)>='A' && *(str+i)<='Z') //如果是大写,前后交换 j-1;
{
char temp=*(str+i);
*(str+i) = *(str+j);
*(str+j) = temp;
--j;
}
else //小写则i+1
++i;
}
}