反转字符串 C++

Reverse a string C++

我是编程新手。我今天学会了如何反转字符串。我尝试使用字符串而不是字符,但终端给出了错误。

string name = { "george" };
int nChar = sizeof(name) - 1;
string *pName = &name;
string *pNameLast = &name + nChar - 1;

while(pName < pNameLast) {
    string save = *pName;
    *pName = *pNameLast;
    *pNameLast = save;
    
    pName++;
    pNameLast--;
}

cout << name << endl;

这里是一个使用std::reverse_interator的例子。这是更好的方法。而不是自己做。

#include <iostream>
#include <string>
#include <iterator>
 
int main()
{
    std::string s = "George";
    std::reverse_iterator<std::string::iterator> r = s.rbegin();
    std::string rev(r, s.rend());
    std::cout << rev << endl;
}

如果你想反转字符串对象,只需执行以下操作(注意这是许多手工方法之一:

#include <iostream>
#include <string>

int main() {

    std::string my_string{"hello"};

    // Similar to your way:
    int index{static_cast<int>(my_string.length() - 1)};
    for (; index >= 0; --index) {
        std::cout << my_string.at(index) << std::endl;
    }
}

问题:

当您尝试执行 string *pName = &namestring *pNameLast = &name + nChar - 1;,您将 std::string 视为 char*。你不能那样做并期望代码能工作。

解法:

std::string 视为 std::string。而不是 string *pName = &namepName 声明为 int 并使用 std::string 的运算符 [] 来访问值。与 pNameLast 类似。您还必须将 string save 声明为 char 或者,如我所愿,使用 std::swap 函数。

附加信息:

  1. 据我所知,当您将 std::string 声明为 string 时,您可能正在使用 using namespace std;。如果是这种情况,请考虑 using namespace std; 被认为是一种不好的做法(更多信息 here)。

完整代码:

#include <iostream>

int main() {
    std::string name = "george";
    int length = name.size();
    int pNameFirst = 0;
    int pNameLast = length - 1;

    while(pNameFirst < pNameLast)
    {
        std::swap(name[pNameFirst],name[pNameLast]);

        pNameFirst++;
        pNameLast--;
    }
    std::cout << name << std::endl;
}