字符串反向程序崩溃

String reverse program crashes

本文关键字:崩溃 程序 字符串      更新时间:2023-10-16

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

#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;
}

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

  1. 在使用[]访问字符串之前,您需要有一个长度为的字符串,尤其是在对其进行写入时
  2. 代码正在尝试访问越界
  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的信息。

str.length()提供了字符串的长度,但当您将其用作数组的索引时,最终会出现数组越界错误

#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;
}