我只需要用指针反转我的char字符串。我怎样才能做到这一点?我的代码:
// this cannot be modified !!!
char s[10] = "abcde";
char *pS;
// my code
pS = new char;
int count = 5;
for (int i = 0; i < 10; i++)
{
if (s[i] != '\0') // not null
{
pS[count - 1] = s[i];
count--;
}
}
cout << "Reversed = " << pS;
有时如果工作正常,我只看到5个字符,它们是相反的。但有时我会看到一些额外的字符(看起来像临时符号)。我想念什么?谢谢!
答案 0 :(得分:2)
你的char数组“s”包含10个字符,但你只用“abcde”和\ 0终结符初始化该数组的前6个字符。 当您遍历整个数组时,您将访问未初始化的字符。
我也看到,你试图写入你没有分配的内存。 您只为“pS”指针为1个字符分配内存,但是您尝试访问它的内存,就像它是for循环中的字符数组一样。
而不是使用硬编码:
int count = 5;
你也可以使用字符串函数strlen()来确定c字符串的长度。
已编辑(未经测试的代码):
char s[10] = "abcde";
char pS[10];
for (int i = 0; i < strlen(s); i++)
{
if (s[i] == '\0') // not null
{
// stop loop, as soon as you reach the end of the original string
break;
}
pS[strlen(s) - 1 - i];
}
// now add the termination char \0 to your pS array
pS[strlen(s)] = '\0';
cout << "Reversed = " << pS;
答案 1 :(得分:1)
只是给你提示如何使用指针反转字符串:
答案 2 :(得分:0)
阅读完另一本书之后,我完全理解指针以及如何正确分配内存。这是我的最终代码,它正确地反转了char字符串的数组(我不需要通用代码,只是工作示例+没有用于反转的std方法):
// not edited part - based on exercise (I mean I cannot change pS to char[5] etc.
char s[10] = "abcde";
char *pS;
pS = new char[strlen(s) + 1]; // allocate correct memory size based on string size
cout << "Size is " << sizeof(pS) << endl; // just for testing
int count = strlen(s); // for iteration
pS[count] = '\0'; // last symbol must be '\o' (thanks to Mr.Yellow)
for (int i = 0; i < 10; i++) // 10 because array of char still has 10 elements
{
if (s[i] != '\0') // looks like "not garbage memory"
{
count--;
pS[count] = s[i]; // set correct value
}
}
cout << "Reversed = " << pS << endl;
感谢所有帮助我的人!