这是我的程序的工作方式:promt用户输入一个字符串,使用compress_string()函数将字符串作为参数传递。使用临时队列从字符串中获取所有非空格字符,然后将它们放回字符串。最后一个字符串根本没有空格。
#include <iostream>
#include "Queue.h"
#include <cstring>
using namespace std;
char* compress_string(char *s){
Queue q;
int cnt=0;
char tmp;
for(int i=0; i<strlen(s); i++){
if(s[i] != ' '){
q.enQueue(s[i]);
cnt++;
}
}
delete[] s;
s = new char[cnt+1];
for(int i=0; i<cnt; i++){
q.deQueue(tmp);
s[i] = tmp;
}
s[cnt] = '\0';
return s;
}
int main(){
char *s = new char[20];
cin.getline(s, 20);
s = compress_string(s);
cout << s;
return 0;
}
这是问题:只有当我返回一个指针然后将其分配给输入指针时它才有效:
s = compress_string(s);
如果我将compress_string()设为void函数,这也意味着不从它返回任何内容,并在main函数中修改如下:
compress_string(s);
输出现在都是无意义的字符。
我想当我将* s传递给compress_string()函数时,它已经是一个指针,所以它在退出函数后会生效。那么一切都出错了? 谢谢大家。