c++这个程序有什么问题,请教高手

来源:百度知道 编辑:UC知道 时间:2024/06/02 00:39:14
建立一个类,实现将数组中大写字母元素放在小写字母元素的左边。
#include<iostream.h>
#include<string.h>
class move{
char *array;
int n;
public:
move(char b[],int m){
strcpy(array,b);
n=m;
}
void change(){
char *p=array;
while(*p){
if(*p>='a'&&*p<='z'){
char *q;
q=p+1;
while(*q){
if(*q>='A'&&*q<='Z') break;
else q++;
}
char t;
t=*p;
*p=*q;
*p=t;
}
else p++;
}

p++;
}
void print(){
for(int i=0;i<n;i++)
cout<<array[i]<<'\t';
}
~move(){
if(array) delete[]array;
}
};
void main(){
char b[]="aDghUTp";
move test(b,8);
test.change();
test.print();
}
是哪里出错了,还是程序本身就不对,望高人指点

#include<iostream.h>
#include<string.h>
class move{
char *array;
int n;
public:
move(char b[],int m){
array = new char[m]; //数组没有初始化
strcpy(array,b);
n=m;
}
void change(){
char *p=array;
while(*p){
if(*p>='a'&&*p<='z'){
char *q;
q=p+1;
while(*q){
if(*q>='A'&&*q<='Z') break;
q++;
}
if (*q==0) break; //如果后面的串里没有大写字母退出
char t;
t=*p;
*p=*q;
*q=t; //应该是*q=t
} //把else去掉,无论找到没有都要继续
p++;
}
}
void print(){
for(int i=0;i<n;i++)
cout<<array[i]<<'\t';
}
~move(){
if(array) delete[]array;
}
};

void main(){
char b[]="aDghUTp";
move test(b,8);
test.change();
test.print();
}

move(char b[],int m){