1. 程式人生 > >谷歌:有一個由大小寫組成的字串,將其中的所有小寫字母排在大寫字母的前面

谷歌:有一個由大小寫組成的字串,將其中的所有小寫字母排在大寫字母的前面

有一個由大小寫組成的字串,現在需要對他進行修改,將其中的所有小寫字母排在答謝字母的前面(大寫或小寫字母之間不要求保持原來次序),如有可能儘量選擇時間和空間效率高的演算法 c語言函式原型void proc(char *str) 也可以採用你自己熟悉的語言

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

void swap( char *a, char *b)
{
	char temp=*a;
	     *a=*b;
		 *b=temp;
}

//因為對修改後的字母原來的順序不要求,所以相對來說還是比較簡單的
void proc( char *str )
{
	int start=0;
	int end=strlen(str)-1;


	for( ; start<end;  )
	{
		//從開始找到第一個大寫字母
		while( 'a'<=*(str+start) && *(str+start)<='z' && start<end)
		{
			start++;
		}

		//從尾巴開始找到第一個小寫字母
		while( 'A'<=*(str+end) && *(str+end)<='Z' && start<end)
		{
			end--;
		}

		//交換
		if(start<end)
		{
			swap( str+start, str+end);
			++start;
			--end;
		}
	}
}

int main()
{	
	char str[]="aAWGafgc";
	proc(str);
	printf("%s \n",str);
	getchar();

	return 0;
}