如何打印这个手动制作的字符串
How to print this manually made string
我只需要反转一个字符串,所以我声明了一个新的字符串变量并迭代复制元素。现在我想通过cout << reversed;
打印反转的字符串,但这什么也没打印。我可以通过 for 循环打印它reverse[i]
直到尺寸,但有没有更好的方法?
#include <iostream>
#include <string>
using namespace std;
int main()
{
string original = "hello";
string reverse;
int i, j = 0, size = original.length();
for (i = size - 1; i >= 0; i--) // original's last as reversed's first
{
reverse[j] = original[i];
j++;
}
reverse[j] = ' '; //last value as null
cout << "original string = " << original << endl;
cout << "reversed string = " << reverse << endl;
system("pause");
return 0;
}
更好的解决方案是使用 std::reverse
:
std::string original = "whatever";
std::string rev = original;
std::reverse(rev.begin(), rev.end());
您可以使用反向迭代器从原始字符串实例化反向字符串:
string original = "hello";
string reverse(original.rbegin(), original.rend());
然后
std::cout << "reversed string = " << reverse << std::endl;
注意:避免using namespace std;
。有一种算法叫做 std::reverse
,您可能无意中将其名称拉入全局命名空间。而且您确实有一个具有该名称的变量。
请参阅此工作演示。
代码的主要问题是reverse
是空的,因此使用任何索引都会导致索引超出界限和未定义的行为。
作为旁注,您不必终止std::string
对象,它们会自动终止。
你应该注意到字符串反向没有大小,所以当你做这样的事情时
for (i = size - 1; i >= 0; i--) // original's last as reversed's first
{
reverse[j] = original[i];
j++;
}
在这里,您正在访问一个在字符串反向中找不到的索引,因为它的大小为 0 。你应该照顾这样的事情。
关于这个问题,你收到了很多答案,我只是想让你注意到这个错误
相反,你可以使
reverse+=original[i];
您甚至不需要创建一个新字符串来保存反转的字符串。只是对原始字符串进行迭代。
void print_reversed(const std::string& str)
{
std::copy(str.crbegin(), str.crend(), std::ostream_iterator<char>(std::cout));
}
相关文章:
- 使用带有 std::cout 的单引号打印字符串实际上打印了数字
- Cout 一个字符串可以打印任何内容到屏幕上
- 在带有 (void*) 强制转换的字符串中打印字符的内存地址
- 逐个字母存储字符串并打印
- 如何在文件中搜索字符串并打印包含该字符串的行
- 如何在 C++ 的字符串中打印从一个索引到另一个索引的字符范围
- 从终端 C++ 中的字符串中打印出 unicode 字符
- 将字符串复制到C 中的另一个字符串并打印其字符
- C++以字符串形式打印出来的整数数字
- printf() 混淆 - 尝试打印字符串时打印 (null),打印缓冲区时打印正确的值
- 为什么字符串变量打印与垃圾
- 为什么传入的字符串在打印两次以上时会有所不同
- 字符串没有打印 c++
- 为什么我读的所有字符串在打印它们时都以相等的方式结束
- c++ 字符串在打印时缩短了一倍
- c++标准::cout不't以字符串形式打印
- 将 char* 字符串参数打印到 UnicodeString 对象中
- 将char数组转换为字符串并打印
- c++ std::cout当我用单引号括起字符串时打印奇怪的字符
- 标准::字符串的C++打印样式格式