这是我使用std::string
反转字符串的代码。但它不起作用..
#include <string>
#include <iostream>
using namespace std;
main()
{
string input;
int i, j;
cout << "Enter a string: ";
getline(cin,input);
string output;
for(i = 0, j = input.length() - 1; i < input.length(); i++, j--)
output[i]=input[j];
cout << "Reversed string = " << output;
cin.get();
}
但是如果我们将字符串输出替换为char output[100];
则可行。那么std::string
不允许字符分配?
答案 0 :(得分:10)
std::string
允许字符分配,但不能超出字符串的末尾。由于std::string output;
创建一个空字符串,output[0]
超出了字符串的末尾。
据推测,这是一个学习练习,但您也可以了解一些可以帮助您的工具:
#include <string>
#include <iostream>
#include <algorithm>
int main() {
std::string input;
std::getline(cin,input);
std::cout << "input: " << input << '\n';
std::reverse(input.begin(), input.end());
std::cout << "reversed: " << input << '\n';
}
或:
#include <iterator>
...
std::string output;
std::reverse_copy(input.begin(), input.end(), std::back_inserter(output));
std::cout << "reversed: " << output << '\n';
或:
std::string output;
std::copy(input.rbegin(), input.rend(), std::back_inserter(output));
或:
std::string output(input.rbegin(), input.rend());
答案 1 :(得分:5)
您必须调整输出大小:
output.resize(input.length());
或最初设定长度:
string output(input.length(), ' ');
#include <string>
#include <iostream>
using namespace std;
main(){
string input;
int i,j;
cout << "Enter a string: ";
getline(cin,input);
string output(input.length(), ' '); // initially set sufficient length
for(i=0,j=input.length()-1;i<input.length();i++,j--)
output[i]=input[j];
cout << "Reversed string = " << output;
cin.get();
}
另见: std::string
答案 2 :(得分:4)
因为output
是空字符串output[i]
将访问无效的内存位置。只需使用output
将字符附加到output += input[j]
字符串。
答案 3 :(得分:3)
尝试反向的STL算法?
include <algorithm>
// ...
std::string str("hello world!");
std::reverse(str.begin(), str.end());
答案 4 :(得分:1)
构建string output;
后,它的长度为0。您需要将其大小调整为input.length()
。
string output;
output.resize(input.length());
调整大小比使用char附加char更快,但你必须首先知道大小。