我试图在void函数中将一个char *与另一个char *交换。我不确定我做错了什么但是当我在主函数中打印char时输出没有加起来。 (我省略了我的" cout"行将产生输出以压缩我被困住的东西)
问题出在函数myOverwite()
中功能:
#include <iostream>
using namespace std;
//returns size of string(# of characters)
int myLength(char *a){
int i=0;
while(a[i]!='\0'){
i++;
}
return i;
}
//reverse string
void myReverse(char *a){
int m=myLength(a);
if(m%2!=0){ //char is not even
m=((m-1)/2);
for(int o=1;o<=m;o++){
char temp=a[m-o];
a[m-o]=a[m+o];
a[m+o]=temp;
}
}else{
m=m/2;
int r=m;
for(int l=(m-1);l>=0;l--){
char temp=a[l];
a[l]=a[r];
a[r]=temp;
r++;
}
}
}
//replaces one word with another
void myOverwrite(char *a,char* b){
int aL=myLength(a);
int bL=myLength(b);
if(aL>=bL){
char* temp=new char[aL];
for(int i=0;i<aL;i++){
temp[i]=a[i];
}
for(int i=0;i<aL;i++){
if(i<bL){
a[i]=b[i];
}else{
a[i]='\0';
}
b[i]=temp[i];
delete[] temp;
}
}else{
char* temp=new char[bL];
for(int i=0;i<bL;i++){
temp[i]=b[i];
}
for(int i=0;i<bL;i++){
if(i<aL){
b[i]=a[i];
}else{
b[i]='\0';
}
a[i]=temp[i];
}
delete[] temp;
}
}
//joins first and second string and stores in place of first string
void myConcat(char* a, char* b){
}
//swap two strings
void mySwap(char *a,char* b){
}
MAIN:
int main(){
char testI[]="Hello";
char testII[]="Goodbye";
char testIII[]="Monica";
char testIV[]="Chase Bank";
char testV[]="Pandemonium";
//tests
cout<<"FUNCTION\t\tIN\t\tOUTPUT\n"<<endl;
//myLength()
cout<<"myLength()\t\t";
cout<<testI<<"\t\t"<<myLength(testI)<<endl;
cout<<"\t\t\t"<<testII<<"\t\t"<<myLength(testII)<<endl;
cout<<"\t\t\t"<<testIII<<"\t\t"<<myLength(testIII)<<endl;
cout<<"\t\t\t"<<testIV<<"\t\t"<<myLength(testIV)<<endl;
cout<<"\t\t\t"<<testV<<"\t\t"<<myLength(testV)<<endl;
//myReverse()
cout<<"\nmyReverse()\t\t";
cout<<testI<<"\t\t";
myReverse(testI);
cout<<testI<<endl;
myReverse(testI);
cout<<"\t\t\t"<<testII<<"\t\t";
myReverse(testII);
cout<<testII<<endl;
myReverse(testII);
cout<<"\t\t\t"<<testIII<<"\t\t";
myReverse(testIII);
cout<<testIII<<endl;
myReverse(testIII);
cout<<"\t\t\t"<<testIV<<"\t\t";
myReverse(testIV);
cout<<testIV<<endl;
myReverse(testIV);
cout<<"\t\t\t"<<testV<<"\t\t";
myReverse(testV);
cout<<testV<<endl;
myReverse(testV);
cout<<"\nmyOverwrite()\t\t";
cout<<"I= "<<testI<<"\t\tII= "<<testII<<endl;
cout<<"\t\t\tI will switch with II"<<endl;
myOverwrite(testI, testII);
cout<<"\t\t\tI= "<<testI<<"\t\tII= "<<testII<<endl;
cout<<"\n\t\t\tII= "<<testII<<"\t\tI= "<<testI<<endl;
cout<<"\t\t\tII will now equal what I was"<<endl;
myOverwrite(testII, testI);
cout<<"\t\t\tII= "<<testII<<"\t\tI= "<<testI<<endl;
cout<<"\n\t\t\tII= "<<testII<<"\t\tV= "<<testV<<endl;
cout<<"\t\t\tII will now equal what V was"<<endl;
myOverwrite(testII, testV);
cout<<"\t\t\tII= "<<testII<<"\t\tV= "<<testV<<endl;
cout<<"\n\t\t\tV= "<<testV<<"\t\tII= "<<testII<<endl;
cout<<"\t\t\tV will now equal what II was"<<endl;
myOverwrite(testV, testII);
cout<<"\t\t\tV= "<<testV<<"\t\tII= "<<testII<<endl;
return 0;
}
这是我的输出:
输出功能
myLength() Hello 5
Goodbye 7
Monica 6
Chase Bank 10
Pandemonium 11
myReverse() Hello olleH
Goodbye eybdooG
Monica acinoM
Chase Bank knaB esahC
Pandemonium muinomednaP
myOverwrite() I= Hello II= Goodbye
I will switch with II
i temp a b [0]
else(aL<bL)
for(int i=0;i<bL;i++)
temp[i]=b[i];
0 [G] [ ] [G] 0
1 [o] [ ] [o] 0
2 [o] [ ] [o] 0
3 [d] [ ] [d] 0
4 [b] [ ] [b] 0
5 [y] [ ] [y] 0
6 [e] [ ] [e] 0
i temp a b [0]
for(int i=0;i<bL;i++)
if t: b[i]=a[i];
f: b[i]='
a[i]=temp[i];
0 [G] [G] [H] 0
1 [o] [o] [e] 0
2 [o] [o] [l] 0
3 [d] [d] [l] 0
4 [b] [b] [o] 0
5 [y] [y] [] 1
6 [e] [e] [] 1
I= Goodbye II= Hello
II= Hello I= Goodbye
II will now equal what I was
i temp a b [0]
else(aL<bL)
for(int i=0;i<bL;i++)
temp[i]=b[i];
0 [G] [ ] [G] 0
1 [o] [ ] [o] 0
2 [o] [ ] [o] 0
3 [d] [ ] [d] 0
4 [b] [ ] [b] 0
5 [y] [ ] [y] 0
6 [e] [ ] [e] 0
i temp a b [0]
for(int i=0;i<bL;i++)
if t: b[i]=a[i];
f: b[i]='
a[i]=temp[i];
0 [G] [G] [H] 0
1 [o] [o] [e] 0
2 [o] [o] [l] 0
3 [d] [d] [l] 0
4 [b] [b] [o] 0
5 [y] [y] [] 1
6 [e] [e] [] 1
II= Goodbye I= Hello
II= Goodbye V= Pandemonium
II will now equal what V was
i temp a b [0]
else(aL<bL)
for(int i=0;i<bL;i++)
temp[i]=b[i];
0 [P] [ ] [P] 0
1 [a] [ ] [a] 0
2 [n] [ ] [n] 0
3 [d] [ ] [d] 0
4 [e] [ ] [e] 0
5 [m] [ ] [m] 0
6 [o] [ ] [o] 0
7 [n] [ ] [n] 0
8 [i] [ ] [i] 0
9 [u] [ ] [u] 0
10 [m] [ ] [m] 0
i temp a b [0]
for(int i=0;i<bL;i++)
if t: b[i]=a[i];
f: b[i]='
a[i]=temp[i];
0 [P] [P] [G] 0
1 [a] [a] [o] 0
2 [n] [n] [o] 0
3 [d] [d] [d] 0
4 [e] [e] [b] 0
5 [m] [m] [y] 0
6 [o] [o] [e] 0
7 [n] [n] [] 1
8 [i] [i] [] 1
9 [u] [u] [] 1
10 [m] [m] [] 1
II= Pandemoniumlo V= Goodbye
V= Goodbye II= Pandemoniumlo
V will now equal what II was
i temp a b [0]
else(aL<bL)
for(int i=0;i<bL;i++)
temp[i]=b[i];
0 [P] [ ] [P] 0
1 [a] [ ] [a] 0
2 [n] [ ] [n] 0
3 [d] [ ] [d] 0
4 [e] [ ] [e] 0
5 [m] [ ] [m] 0
6 [o] [ ] [o] 0
7 [n] [ ] [n] 0
8 [i] [ ] [i] 0
9 [u] [ ] [u] 0
10 [m] [ ] [m] 0
11 [l] [ ] [l] 0
12 [o] [ ] [o] 0
i temp a b [0]
for(int i=0;i<bL;i++)
if t: b[i]=a[i];
f: b[i]='
a[i]=temp[i];
0 [P] [P] [G] 0
1 [a] [a] [o] 0
2 [n] [n] [o] 0
3 [d] [d] [d] 0
4 [e] [e] [b] 0
5 [m] [m] [y] 0
6 [o] [o] [e] 0
7 [n] [n] [] 1
8 [i] [i] [] 1
9 [u] [u] [] 1
10 [m] [m] [] 1
11 [l] [l] [] 1
12 [o] [o] [] 1
V= Pandemoniumlohase Bank II= Goodbye
我不确定发生了什么......
答案 0 :(得分:2)
这里有很多输出,因此需要进行大量筛选。不一致的缩进使你和我们更难调试,但是一旦我自动缩进,它就跳出来了:你每次通过delete[] temp
循环都会执行for
。
一个小小的评论是,NUL-填充较长的字符串一直到原始大小是不必要的;只有一个终止NUL是好的。
我的另一个不那么小的狡辩myOverwrite
被错误地命名。交换是交换; &#39;覆盖&#39;不是真的(有什么?)。当你进入编程世界时,良好的命名非常重要。