如何以相反的顺序返回字符串

时间:2014-03-19 23:13:37

标签: c++ string

我试图制作一个从输入中获取字符串的基本程序,然后反向返回字符串。我已经编写了代码,但每次输入字符串时都会遇到运行时错误。建议?

#include <iostream>
#include <string>

using namespace std;

void flipString(const string& s, string& s2)
{
    int c = 0;

    for (size_t i = s.length() - 1; i >= 0; i--)
    {
        s2.insert(c, 1, s[i]);
        c++;
    }
}

int main()
{
    string str;
    string str2;

    cout << "Enter string: " << endl;
    getline(cin, str);

    flipString(str, str2);

    cout << "\n\n" << "Flipped string: " << str2;

    return 0;
}

3 个答案:

答案 0 :(得分:3)

#include<algorithm>
//...
str2 = str1
std::reverse(str2.begin(),str2.end()); 

答案 1 :(得分:2)

void flipString( const std::string &s, std::string &s2 )
{
   s2.assign( s.rbegin(), s.rend() );
}

如果你想使用循环,那么该函数可以采用以下方式

void flipString( const std::string &s, std::string &s2 )
{
   s2.clear();
   s2.reserve( s.size() );

   for ( std::string::size_type i = s.size(); i != 0 ;  )
   {
      s2.push_back( s[--i] );
   }
}

或者如果您想使用标准算法,那么您可以写:)

#include <algorithm>
#include <iterator>

void flipString( const std::string &s, std::string &s2 )
{
   s2.clear();
   s2.reserve( s.size() );

   std::reverse_copy( s.begin(), s.end(), std::back_inserter( s2 )  );
}

答案 2 :(得分:0)

问题中实现的逻辑将完成反转字符串的工作(尽管可能有许多其他更有效的方法)。但是,当我们运行它时,我们会遇到分段错误。

当对象试图访问不属于它的内存时,我们会遇到分段错误。

在上面的例子中,函数flipString采用const string&amp; s作为输入,然后使用s [i]分配其中的内容。 []运算符将返回对char的引用。因此,您正在分配const对象的引用。因此,当您尝试访问它时会出现故障。

尝试以下flipString方法,它应该可以工作。

    void flipString(const string& s, string& s2)
    {
        int c = 0;
        for (int i = s.length() - 1; i >= 0; i--)
        {
            const char current_char = s[i];
            s2.insert(c, 1, current_char);
            c++;
        }
    }

如果我错了,请纠正我。

希望这会有所帮助。