如何使用交换函数和指针来反转字符串数组? (C ++)

时间:2018-03-20 01:52:20

标签: c++ arrays string pointers

我的任务是将字符串数组反转到位。我必须使用交换函数来交换单个字符,这个交换应该在循环中。将两个字符指针传递给swap函数以操作内存中的位置。所以这就是我到目前为止所做的:

<File Include="bin/stdole.dll"> ...

我对指针的经验很少,所以我可能会错误地使用它们。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

在第

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风格字符串的长度。虽然比这两种方法更好的解决方案是使用{{1除了比C风格的字符串更容易使用之外,它跟踪它的长度。

此外,您不能在逗号分隔的同一语句中声明两个变量,除非它们是相同的类型,在这种情况下,您省略第二个变量的类型,如下所示:std::string。< / p>

另外,您应该学习如何使用引用将参数传递给交换函数,以便在使用函数时不必一直引用它们。

答案 1 :(得分:0)

我认为你走在正确的轨道上,但是你的指针已经失去了它。

#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;
}