c++ - 从输入中反转字符
问题描述
我正在尝试反转用户输入中提供的字符。我遇到了反向功能的问题,尤其是循环。我无法让它工作-我可以得到建议吗?
#include <iostream>
using namespace std;
#include <cstring>
char* reverse(char* input) {
int len = strlen(input);
char temp[len];
for(int i=len; i>len; --i) {
temp[i]+=input[i];
}
return temp;
}
int main()
{
char input[100];
while(cin>>input) {
cout << reverse(input);
}
return 0;
}
解决方案
您的程序几乎没有问题
您正在尝试返回局部变量地址,即临时数组地址。该函数会将地址返回给主函数。由于内存可能会被清理,因此它将打印地址处存在的垃圾值。
正如 Rohan Bari 提到的可变长度数组可能会导致未定义的行为。在那里你可以创建一个恒定长度的数组,即
char temp[100];
或者您可以在堆上动态分配数组。块终止后在堆上分配的内存不会被清除,但我们必须手动删除它。
char* temp = new char[len];
由于数组从 0 开始,它一直持续到
len-1
所以循环条件应该从开始len-1
并且必须一直到 0 才能反转。+
即使您尝试仅添加 char,运算符也不适用于数组或 char,它会执行其 ASCII 值的正常整数加法。
这是您的代码的改进版本
#include<iostream>
using namespace std;
#include <cstring>
char* reverse(char* input) {
int len = strlen(input);
char* temp = new char [len]; // or you can use char temp[100];
int j = 0; //temp variable to enter values from 0th index if we use same as loop it just enter in the same order as original char array.
for(int i=len-1; i>=0; --i) {
temp[j++] = input[i];
}
temp[j] = '\0';
return temp;
}
推荐阅读
- python - 怀疑 tf/keras 网络的功能
- python - SimpleITK 读取图像切片
- css - 动画 css slideInDown
- javascript - 如何在 Node js 中使用 Hmac 创建令牌
- python - 如何提取在 Python 中使用 PKWARE SecureZip 压缩的受密码保护的 zip 文件?(视窗 10)
- ruby - Ruby Selenium Webdriver:在 Mac Chrome 上关闭文件对话框
- firebase - Flutter Firestore 获取值的总和
- airflow - 尝试在 Airflow 上使用 SendGrid 时出现错误 400(Google Composer)
- c++ - 无法编译 TRAP 库:'operator!=' 不匹配(操作数类型为 'std::basic_istream
' 和 'long int') - c# - 将数据表列附加到其他数据表