繁体   English   中英

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

[英]How to reverse a string array in place using a swap function and pointers? (C++)

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

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

}

我对指针的经验很少,因此可能使用不正确。 任何帮助,将不胜感激!

在行

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

另一件事,您应该了解使用引用将参数传递给交换函数的知识,这样您就不必在使用函数时始终都引用它们。

我认为您走在正确的轨道上,但您却因指针而迷失了方向。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM