我正在尝试编写一个程序,将消息以字符串形式向后存储到字符数组中,每当我运行它时,它有时会成功将其向后写入,但有时会将随机字符添加到最后,如下所示:
输入:向后写
sdrawkcab siht etirw
#include <iostream>
#include <string>
using namespace std;
int main()
{
string message;
getline(cin, message);
int howLong = message.length() - 1;
char reverse[howLong];
for(int spot = 0; howLong >= 0; howLong--)
{
reverse[spot] = message.at(howLong);
spot++;
}
cout << reverse;
return 0;
}
答案 0 :(得分:4)
缓冲区reverse
的长度必须为message.length() + 1
,以便它可以存储空终止字节。 (并且空终止字节需要放在该缓冲区的最后一个位置。)
答案 1 :(得分:2)
由于您无法声明一个长度仅在运行时已知的数组,因此您必须使用容器。
std::vector<char> reverse(message.length());
或者更好,请使用std::string
。 STL还为您提供了一些不错的功能,例如在构造函数调用中构建反向字符串:
std::string reverse(message.rbegin(), message.rend();
答案 2 :(得分:1)
您应该构建一个新字符串,而不是反转到字符缓冲区。它更容易,也不容易出错。
string reverse;
for(howlong; howLong >= 0; howLong--)
{
reverse.push_back(message.at(howLong));
}
答案 3 :(得分:1)
使用适当的C ++解决方案。
内联反转消息:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
string message;
getline(cin, message);
//inline reverse the message
reverse(message.begin(),message.end());
//print the reversed message:
cout << message << endl;
return 0;
}
撤消消息字符串的副本:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
string message, reversed_message;
getline(cin, message);
//reverse message
reversed_message = message;
reverse(reversed_message.begin(), reversed_message.end());
//print the reversed message:
cout << reversed_message << endl;
return 0;
}
如果你真的需要在C字符串中保存反转的字符串,你可以这样做:
char *msg = (char *)message.c_str();
但是,根据经验,如果可以,请使用C ++ STL字符串。