首页 > 解决方案 > 从输入中反转字符

问题描述

我正在尝试反转用户输入中提供的字符。我遇到了反向功能的问题,尤其是循环。我无法让它工作-我可以得到建议吗?

#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;
}

标签: c++

解决方案


您的程序几乎没有问题

  1. 您正在尝试返回局部变量地址,即临时数组地址。该函数会将地址返回给主函数。由于内存可能会被清理,因此它将打印地址处存在的垃圾值。

  2. 正如 Rohan Bari 提到的可变长度数组可能会导致未定义的行为。在那里你可以创建一个恒定长度的数组,即

    char temp[100];
    

或者您可以在堆上动态分配数组。块终止后在堆上分配的内存不会被清除,但我们必须手动删除它。

char* temp = new char[len];
  1. 由于数组从 0 开始,它一直持续到len-1所以循环条件应该从开始len-1并且必须一直到 0 才能反转。

  2. +即使您尝试仅添加 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;
   }

推荐阅读