c++ - 你会如何改进这个算法? (c 弦反转)

标签 c++ algorithm cstring

为了解决我在网上发现的一些编程面试挑战,我不得不编写一个算法来反转 const char * 并返回指向新 char * 的指针。我想我有它,但为了让它正常工作,我不得不做一些奇怪的事情——基本上必须自己解释空终止字符。不知怎的,我觉得这是错误的,但我很困惑,我想知道是否有人可以帮助我:

char * reverse(const char * str)
{
  int length = strlen(str);
  char * reversed_string = new char[length+1];

  for(int i = 0; i < length; ++i)
  {
    reversed_string[i] = str[(length-1) - i];
  }
  //need to null terminate the string
  reversed_string[length] = '\0';

  return reversed_string;

}

int main(int argc, char * argv[])
{

  char * rev_str = reverse("Testing");

  cout << "Your string reversed is this: " << rev_str << endl;

  delete rev_str;
  rev_str = 0;

  return 0;
}

最佳答案

std::reverse 来自 <algorithm>适用于字符串和 char数组:

string str = "Hello";
char chx[] = "Hello";

reverse(str.begin(), str.end());
reverse(chx, chx + strlen(chx));

cout << str << endl;
cout << chx << endl;

/EDIT:当然,这会修改原始字符串。但是 STL 来拯救。下面创建一个新的反转字符串。不幸的是(?),这不能直接在 C char 上工作数组而不创建额外的(隐式)拷贝:

string reverse_string(string const& old) {
    return string(old.rbegin(), old.rend());
}

cout << reverse_string("Hello") << endl;

关于c++ - 你会如何改进这个算法? (c 弦反转),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/219420/

相关文章:

c++ - 使用 vector 查找平衡指数的程序失败

Visual Studio 2013 中的 C++ UI 替代方案

c - 我怎样才能减少运行时间?

algorithm - 隐私和匿名化 "Algorithm"

c++ - 遍历嵌套的字符串 vector

c++ - 调用 CString::FormatV 时转义 "%"符号

c - 如何使用 c 解析 ',' 分隔的 char 字符串?

C++ Builder 2009 - 无法聚焦禁用或不可见的窗口

c++ - 子数组模板

php - 长位随机数生成算法