我正在创建一个c ++程序,它将使用“%20”替换char数组中的所有空格。 例如,“这是一些带有一些空格的文本”将转换为“此%20is%20some%20text%20with%20some%20spaces”
请参阅线路不正常的节目评论。
此程序中的replacer函数将指针指向char数组和字符串的大小。 然后方法创建具有替换空格的新char数组,函数返回指向替换char数组的指针。
这个程序的问题在于main函数中的print char数组,其指针由replacer返回。
“被替换”是指向被替换字符串的指针变量。在main函数中,我试图使用“替换”指针打印char数组。
如果我手动打印所有内容,它可以正常工作。
例如,如果我这样做:cout << *replaced << *(replaced+1) << *(replaced+2)
....
将打印整个字符串。
但是内部循环它给了我垃圾价值。请告诉我代码中的哪个地方我犯了什么错误。谢谢。
#include <iostream>
using namespace std;
char * replacer(char * text, unsigned int size )
{
int space_count = 0, i = 0, new_size = 0;
cout << "Given text : ";
for(i = 0;i < size;i++)
{
cout << *(text + i) ;
char temp = *(text + i);
if (temp == ' ')
{
space_count++;
}
}
cout << endl;
cout << "Number of spaces in given text : " << space_count << endl;
new_size = size + ( 2 * space_count );
char replaced_string[new_size];
int counter = 0 ;
for(i = 0 ;i < size; i++)
{
char temp = *(text + i);
if(temp == ' ')
{
replaced_string[counter++] = '%';
replaced_string[counter++] = '2';
replaced_string[counter++] = '0';
}
else
{
replaced_string[counter++] = temp;
}
}
cout << "in replacer method : " << replaced_string << endl;
char * pointer_to_replaced;
pointer_to_replaced = replaced_string;
return pointer_to_replaced;
}
int main()
{
int t;
char original[] = "This is some text with some spaces";
char * original_pointer = original;
char *replaced;
replaced = replacer(original_pointer, sizeof(original));
//cout << *(replaced) << *(replaced+1) << *(replaced+2) << *(replaced+3) << *(replaced+4) << endl;
// ABOVE LINE WORKS FINE
for(t=0;t<20;t++)
{
cout<<*(replaced+t); // THIS IS NOT WORKING PROPERLY
}
cout <<endl;
return 0;
}
答案 0 :(得分:3)
第一个问题是你在堆栈上分配replaced_string
,然后期望它在从函数返回后保留其值。你应该在堆上进行分配,然后记住delete[]
内存。当函数返回时,堆栈消失。
// char replaced_string[new_size];
char* replaced_string = new char[new_size];
第二个问题是你需要在循环后空终止replaced_string
。
replaced_string[counter] = '\0';
此外,您无需循环以打印返回值。您可以直接使用cout
。
cout << replaced << endl;
也可能存在其他潜在问题,但修复这三个问题会使代码生效。