建立一个类MOVE,实现将数组中大字字母元素放在小写字母元素的左边。c++

编译没出错,运行结果只有一个字母

#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;}
![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/409565734086165.png "#left")



代码没有必要写那么复杂,说白了,只要一种稳定排序(所谓稳定排序,就是相同的值在排序后次序不变,冒泡排序就是稳定排序)对你的字符串排序,所有的大写字母视作0,小写字母视作1

  • 这篇博客: C++11介绍之移动构造函数、move函数和右值引用中的 右值引用 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 首先给一个右值引用声明的例子:

    ​
    std::string&& r5("Hello World!!"); 

    这里右值引用r5绑定了一个临时变量,临时变量的内容为"Hello World!!",右值引用只可以绑定临时变量也就是右值,而左值(有地址的变量)是不可以的,例如如下操作是允许的:

    r5 = "abcdefg";

    而如下操作是不允许的:

    std::string strtest("Hello World!!");
    std::string&& r4{ strtest }; //不可以,strtest是左值