编译没出错,运行结果只有一个字母
#include
using namespace std;
class MOVE{
char *array;
int n;
public:MOVE(char b[],int m)
{
n=m;
array=new char[n+1];
strcpy(array,b);
}
void change(){
char*p1=new char[strlen(array)+1];
char*p2=new char[strlen(array)+1];
int i,j=0,k=0;
for(i=0;i<strlen(array);i++){
if(array[i]>='A'&&array[i]<='Z'){
p1[j]=array[i];
j++;
}
else {p2[k]=array[i];k++;
}
p1[j]=p2[k]='\0';
strcat(p1,p2);
strcpy(array,p1);
delete []p1;
delete []p2;
}
}
void print(){
for(int i=0;i<=strlen(array);i++){
cout<MOVE(){if(array)delete []array;}
};
int main(){
char b[]="fdsUFfsTjfsKFEkWC";
int n;
n=(sizeof(b)-1)/sizeof(char);
MOVE test(b,n);
test.change();
test.print();
return 0;}

代码没有必要写那么复杂,说白了,只要一种稳定排序(所谓稳定排序,就是相同的值在排序后次序不变,冒泡排序就是稳定排序)对你的字符串排序,所有的大写字母视作0,小写字母视作1
首先给一个右值引用声明的例子:
std::string&& r5("Hello World!!");
这里右值引用r5绑定了一个临时变量,临时变量的内容为"Hello World!!",右值引用只可以绑定临时变量也就是右值,而左值(有地址的变量)是不可以的,例如如下操作是允许的:
r5 = "abcdefg";
而如下操作是不允许的:
std::string strtest("Hello World!!");
std::string&& r4{ strtest }; //不可以,strtest是左值