字符串反向程序崩溃

时间:2014-04-23 18:34:32

标签: c++ string

我正在制作一个正在反转给定字符串的程序。但我不知道为什么我的程序崩溃了。帮助将受到高度赞赏而不是批评。谢谢!

#include <iostream>
#include <string>

using namespace std;

string reverse(string );

int main()
{
    string str;
    cout << "Enter a string"<<endl;
    getline (cin, str);
    reverse(str);
}

string reverse (string str)
{
    string str1;
    for(int i = str.length(); i >= 0; i--)
    {
        str1[i] = str[i];
    } 
    return str1;
}

4 个答案:

答案 0 :(得分:3)

您的代码中至少存在三个问题:

  1. 在使用[]访问之前,您需要有一个长度为字符串的字符串,尤其是在写入时。
  2. 代码试图访问越界。
  3. 算法只是以相反的顺序复制字符串,而不是反转字符串本身。
  4. 实施留给读者作为练习。

答案 1 :(得分:3)

您无需重新发明轮子,使用算法!

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

int main()
{
    string str;
    cout << "Enter a string"<<endl;
    getline (cin, str);
    std::reverse(str.begin(), str.end());
}

您可以在cppreference.com上详细了解std::reverse

答案 2 :(得分:2)

str.length()给出了字符串的长度,但是当你使用它作为数组的索引时,最终会出现一个数组越界错误

答案 3 :(得分:0)

#include <algorithm>
#include <string>

void reverse_in_place(std::string &str) {
  std::reverse(str.begin(), str.end());
}
std::string copy_and_reverse(std::string str) {
  std::reverse(str.begin(), str.end());
  return str;
}