【问题标题】:reverse string in c++ using char array使用char数组在c ++中反转字符串
【发布时间】:2021-07-24 10:38:42
【问题描述】:

我尝试使用 char 数组反转字符串,但在输出中打印了一些垃圾值,我不知道是什么原因,而且它只发生在大字符串中。

我的代码

string reverseWord(string str){
  int j = 0, n=0;
  
  n = str.length();
  char t[n]={0};
  for(int i=n-1;i>=0;i--)
  {
     t[j]=str[i];
     j+=1;
  }
  return t;
}

输入 = APFGMRZXIFPSXKOQDRRQJBBZ 输出 = ZBBJQRRDQOKXSPFIXZRMGFPAB@

我想知道@这两个垃圾值背后的原因

使用gfg的在线IDE。

【问题讨论】:

  • std::reverse(str.begin(), str.end()); return str; -- 你为什么不这样做?
  • char t[n]={0}; 是一个可变长度数组,标准 C++ 不支持。你应该避免它的便携性。
  • 你在哪里学过这种编码风格,你应该忘记它AFAIK。您有一个不必要的函数参数副本。您有不受支持的可变长度数组。你有遗留的 C 风格的字符串。您对返回值进行了不必要的转换。整个函数可以是return string(str.rbegin(), str.rend());

标签: c++ arrays string function char


【解决方案1】:

C 风格的字符串必须以空字符 '\0' 结尾。

您应该直接分配string,而不是使用标准C++ 中没有的可变长度数组,因为您正在返回它。 (假设这里的string 表示std::string

string reverseWord(string str){
  int j = 0, n=0;
  
  n = str.length();
  string t(n); // allocate string instead of VLA
  for(int i=n-1;i>=0;i--)
  {
     t[j]=str[i];
     j+=1;
  }
  return t;
}

【讨论】:

  • 也许你应该提到在这种情况下简单地反转字符串以避免内存分配的可能性(或者string应该作为常量引用传递的事实)......
  • input as Geeks 输出是 skeeG 是对的,但是在上面显示的特定类型的输入中会造成麻烦,请您详细说明原因
  • @Arav "能否详细说明原因"原因是"C风格的字符串必须以空字符'\0'结尾" i>.
猜你喜欢
  • 2014-08-13
  • 1970-01-01
  • 2016-01-25
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
  • 1970-01-01
  • 2014-01-13
  • 2015-06-12
相关资源
最近更新 更多