如何反转std :: string?

Kam*_*ill 28 c++ string binary reverse

我试图弄清楚temp当我用二进制数字读取字符串时如何反转字符串

istream& operator >>(istream& dat1d, binary& b1)    
{              
    string temp; 

    dat1d >> temp;    
}
Run Code Online (Sandbox Code Playgroud)

Max*_*ert 57

我不确定包含二进制数字的字符串是什么意思.但是,对于反转字符串(或任何兼容STL的容器),您可以使用std::reverse(). std::reverse()在适当的位置操作,因此您可能希望首先复制该字符串:

#include <algorithm>
#include <iostream>
#include <string>

int main()
{
    std::string foo("foo");
    std::string copy(foo);
    std::cout << foo << '\n' << copy << '\n';

    std::reverse(copy.begin(), copy.end());
    std::cout << foo << '\n' << copy << '\n';
}
Run Code Online (Sandbox Code Playgroud)

  • 我可以添加"return 0",但恰好C++有一个特殊的情况`main`:"如果控件到达`main`的末尾而没有遇到return语句,那么效果就是执行`return 0; `"(http://en.cppreference.com/w/cpp/language/main_function,特殊属性列表中的第4项). (11认同)
  • `std::reverse` **是**一个 ​​`void` 函数:http://en.cppreference.com/w/cpp/algorithm/reverse。 (3认同)
  • 它应该是一个 void 函数,因为它不返回值 (2认同)
  • @MaxLybbert是的,但是**,由于实现的`main()`不是`void`,应该返回一个值。这就是@Wilhelm试图指出的。 (2认同)

HC4*_*ica 30

尝试

string reversed(temp.rbegin(), temp.rend());
Run Code Online (Sandbox Code Playgroud)

编辑:按要求详细说明.

string::rbegin()并且string::rend(),分别代表"反向开始"和"反向结束",将反向迭代器返回到字符串中.这些是支持标准迭代器接口的对象(operator*取消引用元素,即字符串的字符,并operator++前进到"next"元素),这样rbegin()指向字符串的最后一个字符,rend()指向第一个字符,并推进迭代器将它移动到前一个字符(这是使它成为反向迭代器的原因).

最后,我们将这些迭代器传递给的构造函数是一个形式的字符串构造函数:

template <typename Iterator>
string(Iterator first, Iterator last);
Run Code Online (Sandbox Code Playgroud)

它接受一对表示一系列字符的任何类型的迭代器,并将字符串初始化为该字符范围.

  • @Job_September_2020 这只是一个变量名,可以是任何东西 (2认同)