我试图制作一个从输入中获取字符串的基本程序,然后反向返回字符串。我已经编写了代码,但每次输入字符串时都会遇到运行时错误。建议?
#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;
}
答案 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++;
}
}
如果我错了,请纠正我。
希望这会有所帮助。