如何使用交换函数和指针反转字符串数组? (C++)
Posted
技术标签:
【中文标题】如何使用交换函数和指针反转字符串数组? (C++)【英文标题】:How to reverse a string array in place using a swap function and pointers? (C++) 【发布时间】:2018-03-20 01:52:19 【问题描述】:我的任务是反转一个字符串数组。我必须使用交换单个字符的交换函数,并且这个交换应该在一个循环中。将两个字符指针传递给交换函数以操作内存中的位置。所以这是我到目前为止所拥有的:
#include <iostream>
using namespace std;
void swap(char *a, char *b) //swap function that accepts two char pointers
char temp = *a;
*a = *b;
*b = temp;
int main()
char array[5] = 'H','e','l','l','o'; //string hello
char *start = array[0]; //pointer for start of string
char *end = array[array.length-1]; //pointer for end of string
for (int i = 0, int j = array.length - 1; i < j; i++, j-- )
swap(start,end);
start++;
end--;
for(int i = 0; i < 5; i++) //print reversed array to user
cout << array[i];
我对指针没有什么经验,所以我可能会错误地使用它们。任何帮助将不胜感激!
【问题讨论】:
除了明显的语法错误(array.length
不起作用),你测试过这段代码吗?快速浏览一下,您的算法看起来不错。
char *start = array[0];
你不能用字符初始化指针,你应该这样做char *start = array;
for (int i = 0, int j = array.length - 1; i < j; i++, j-- )
可以简化很多。比较start
和end
。
【参考方案1】:
在行
char *start = array[0];
char *end = array[array.length-1];
array[0]
是一个字符,而不是一个指针。您可以引用它来获取带有&array[0]
的指针,或者利用数组的名称可以用作指向第一个元素的指针,例如char *start = array
。
什么时候做的
for (int i = 0, int j = array.length - 1; i < j; i++, j-- )
问题在于基本 C 数组中没有 array.length
这样的东西。即使有,它也被称为array.length()
。您应该单独跟踪数组的长度或使用sizeof(array) / sizeof(array[0])
。 请注意,这给您的是数组的大小(编译时间常数),而不是 C 风格字符串的长度。虽然比这两种方法更好的解决方案是只使用 std::string
,除了比 C 风格的字符串更容易使用之外,它还可以跟踪其长度。
此外,您不能在同一语句中声明两个变量,用逗号分隔,除非它们是相同的类型,在这种情况下,您可以省略第二个变量的类型,如下所示:int i = 0, j = length
。
另外,您应该了解如何使用引用将参数传递给您的交换函数,这样您就不必在使用该函数时一直引用它们。
【讨论】:
感谢您的回答。我进行了您建议的更改,并且指针线不再出现错误;但是,我仍然在这一行遇到错误: for (int i = 0, int j = 4; i 您不能在 for 循环的初始化语句中初始化两个变量(;
之前的第一个组件)。只需在此语句之外初始化变量,或者在其中初始化一个变量,然后在 for
循环之前的行中初始化另一个变量
@EatatJoes 据我所知你可以做到for(int i = 0, j = length - 1; ...)
。
我的错,你是对的。只是不使用另一种类型进行初始化; int i = 0, float j = 5
.
啊,我不知道。谢谢大家,它终于编译了!【参考方案2】:
我认为你在正确的轨道上,但你的指针有点迷失了。
#include <iostream>
using namespace std;
void swap(char *a, char *b)
char temp = *a;
*a = *b;
*b = temp;
int main()
const unsigned int array_size = 5u;
char array[] = 'H','e','l','l','o' ;
for (int i = 0, j = array_size - 1; i < j; i++, j--)
swap(&array[i], &array[j]);
for (int i = 0; i < array_size; i++)
cout << array[i];
return 0;
【讨论】:
以上是关于如何使用交换函数和指针反转字符串数组? (C++)的主要内容,如果未能解决你的问题,请参考以下文章