第一道题其实就是剑指offer中调整数组顺序使奇数位于偶数前变形题。
如果需要保证相对顺序不变的话,可以直接另开两个字符串空间,第一个字符串保存#,另一个字符串保存字母,最后将这两个字符串的和重新赋值给原先的字符串。
void string_shift2(string &s,int len)
{
	if(s.empty()) return;
	string s1,s2;
	for(auto e:s)
	{
		if(e=='#') s1+=e;
		else if(isalpha(e)) s2+=e;
	}
	s=s1+s2;
} 
如果不需要保证相对顺序的话,可以维护两个指针。第一个指针指向字符串的第一个字符,它只向后移动,直到遇见字符为字母,第二个指针指向数组的最后一个字符,它只向前移动,直到遇到#。然后交换两个指针的内容,一直重复上述过程,直到两个指针相遇。
void string_shift(string &s,int len)
{
	if(s.empty()) return;
	int index1=0;
	int index2=len-1;
	
	while(index1<index2)
	{
		while(index1<index2&&!isalpha(s[index1])) 
			++index1;
		while(index1<index2&&isalpha(s[index2])) 
			--index2;
		if(index1<index2)
		 	swap(s[index1],s[index2]);
	}
	
}