Linux终端中C++的奇怪输出
Strange output from C++ in Linux Terminal
我最近开始学习使用C++语言进行编程。我写了一个简单的程序,用来反转我在终端中使用gcc/g++编译的字符串。
#include <iostream>
using namespace std;
string reverse_string(string str)
{
string newstring = "";
int index = -1;
while (str.length() != newstring.length())
{
newstring.append(1, str[index]);
index -= 1;
}
return newstring;
}
int main()
{
string x;
cout << "Type something: "; cin >> x;
string s = reverse_string(x);
cout << s << endl;
return 0;
}
我已经重写了多次,但总是得到相同的输出:
Type something: banana
��
有没有人遇到过这样的问题,或者知道如何解决?
您的代码将index
初始化为-1,然后使用str[index]
,但负索引在C++中没有合理意义。试着这样初始化它:
index = str.length() - 1;
我可以看到您的代码有几个问题。首先,您将index
初始化为-1
,然后将其递减。也许您的意思是auto index = str.length()-1;
?
我建议您查看std::reverse,它将完成您想要的工作。
然后您的主要功能变为:
#include <algorithm>
#include <iostream>
#include <string>
using namespace std;
int main()
{
string x;
cout << "Type something: ";
cin >> x;
reverse(x.begin(), x.end());
cout << x << endl;
return 0;
}
如果您真的想编写自己的反向函数,我建议使用迭代器而不是数组索引。另一种方法见std::reverse_iterator。
注意,以上操作将简单地反转字符串中的字节顺序。虽然这对ASCII来说很好,但对多字节编码(如UTF-8)来说不起作用。
您应该使用像valgrind这样的内存调试器。用它扫描二进制文件是一种很好的做法,可以节省很多时间。
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 请解释"函数1(p1,p2,p3);"的输出
- C++:将控制台输出存储在宏中更好吗
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 为什么我的代码在输出中增加了93天
- 如何从void函数输出字符串
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- AES加密到解密未正确输出
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- C++格式化输出问题
- 将值从二维数组输出到文本文件
- 集合上的输出迭代器:assign和increment迭代器
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- 为什么rk4.do_step不输出C++中的初始条件
- 输出没有重复元素的动态数组(收缩数组)C++
- 如何根据单词在文本中出现的概率输出单词