C ++使用指针反向字符串

时间:2013-10-20 01:22:42

标签: c++ string pointers

我被赋予了从用户接收字符串输入并反转字符串顺序并打印结果的任务。我的代码是这样的:

#include <iostream>
#include <cstring>
#include <string>
using namespace std;

int main() {
    string input;
    char *head = new char, *tail = new char;
    char temp;
    //Get the string from the user that will be reversed
    cout << "Enter in a string that you want reversed: ";
    getline(cin, input);
    //Create and copy the string into a character array
    char arr[input.length()];
    strcpy(arr, input.c_str());
    //Set the points of head/tail to the front/back of array, respectably
    head = &arr[0]; tail = &arr[input.length()-1];
    //Actual reversal part of the code (Does not work)
    for(int i=0; i<input.length(); i++) {
        temp = *(tail);
        *tail = *head;
        *head = temp;
        tail --; head ++;
    }
    //Print the character array
    for(int i=0; i<input.length(); i++) {
        cout << arr[i];
    }
    //Free up memory
    delete head; delete tail;
    head = NULL; tail = NULL;
    return 0;
}

当我打印它时,字面上没有任何改变,我似乎无法理解为什么因为我是指针的新手。这是我遇到问题的具体方块:

    for(int i=0; i<input.length(); i++) {
        temp = *(tail);
        *tail = *head;
        *head = temp;
        tail --; head ++;
    }

关于如何解决这个或指针知识的任何输入,非常感谢。

1 个答案:

答案 0 :(得分:1)

你的方法很好但是......

for(int i=0; i<input.length(); i++) {
        temp = *(tail);
        *tail = *head;
        *head = temp;
        tail --; head ++;
    }

你有没有尝试在纸上解决这个问题?您将每对字母交换两次,使数组恢复原始顺序。

只需更改迭代限制,在headtail在中间相遇时停止,您就可以了:

for(int i=0; i<input.length()/2; i++) {
  ...
}