Обратная строка с указателями и функциями в C ++ - PullRequest
0 голосов
/ 24 октября 2019

Я пытаюсь создать программу, которая переворачивает строку с указателями и функциями в C ++, но до сих пор мой метод возвращает только пустую строку, а не перевернутую.

#include <iostream>

using namespace std;

void invertS(string *str_ptr );

int main()
{
   string value {"Hello"};
   string *str_ptr {nullptr};
   str_ptr = &value;
   invertS(str_ptr);
   cout << value;
};

void invertS(string *str_ptr) {
    string str = *str_ptr;
    string temp = "";
    int length = str.length();
    int j = length - 1;
    for (int i = 0; i < length; i++) {
        temp[i] = str[j];
        j--;
    };
    *str_ptr = temp;
};

Результатвсегда просто пустая строка. Обратите внимание, что я назначаю строку, на которую ссылается str_ptr, новой строке внутри функции, чтобы я мог использовать .length в строке. Поскольку .length не может использоваться на указателе, насколько я знаю. Если есть лучший способ сделать это, я также хотел бы знать, как это происходит.

Ответы [ 3 ]

2 голосов
/ 24 октября 2019

Проблема в том, что вы инициализируете временную строку с нулевой длиной, а затем пытаетесь получить доступ к индексам (что должно привести к сбою IMO). Простое решение - создать копию исходной строки, чтобы длина была такой же, как и исходная строка, которую нужно сторнировать.

// Example program
#include <iostream>

using namespace std;

void invertS(string *str_ptr );

int main()
{
   string value {"Hello"};
   string *str_ptr {nullptr};
   str_ptr = &value;
   invertS(str_ptr);
   cout << "Reversed string: " << value << endl;
};

void invertS(string *str_ptr) {
    string str = *str_ptr;
    string temp {str};
    int length = str.length();

    int j = length - 1;
    for (int i = 0; i < length; i++) {
        temp[i] = str[j];
        j--;
    };
    *str_ptr = temp;
};
1 голос
/ 24 октября 2019

Я предполагаю, что это просто ради образования / обучения, но вы должны избегать использования указателей, когда у нас так много богатой библиотеки C ++.

Чтобы исправить приведенный выше код, вам нужно добавить символы к temp. Размер temp имеет размер ноль. Или измените его размер на length

temp += str[j];

1 голос
/ 24 октября 2019

Вы создаете новую строку длиной 0 здесь:

string temp = "";

А потом вы делаете это:

temp[i] = str[j];

Однако размер этой строки все еще 0, так что это неверно. Вы должны изменить размер вашей строки после ее создания:

temp.resize(str.length());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...