如何改善这种算法? (三串反转) [英] How would you improve this algorithm? (c string reversal)

查看:130
本文介绍了如何改善这种算法? (三串反转)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

工作通过一些我在网上找到节目访谈的挑战,我不得不写一个算法来扭转一个const char *,并返回一个指针到一个新的char *。我想我有它,而是让它正常工作,我不得不做一些靠不住的东西 - 基本上不必考虑空终止字符自己。不知怎的,我觉得这是不对的,但我很为难,我想知道,如果有人可以帮助我:

 的char *反向(为const char *海峡)
{
  INT长度= strlen的(STR);
  字符* reversed_string =新的char [长度+ 1];

  的for(int i = 0; I<长度; ++ I)
  {
    reversed_string [i] = STR [(长度1) - 我]。
  }
  //需要空终止字符串
  reversed_string [长度] ='\ 0';

  返回reversed_string;

}

INT主(INT ARGC,字符* argv的[])
{

  字符* rev_str =反向(测试);

  COUT<< 你的字符串逆转是这样的:<< rev_str<< ENDL;

  删除rev_str;
  rev_str = 0;

  返回0;
}
 

解决方案

STD ::扭转 <算法> 适用于字符串和字符数组:

 字符串str =你好;
焦炭CHX [] =你好;

反向(str.begin(),str.end());
反向(CHX,CHX +的strlen(CHX));

COUT<<海峡<< ENDL;
COUT<< CHX<< ENDL;
 

/编辑:这当然,修改原始字符串。但STL救援。下面创建一个新的逆转字符串。 (?)不幸的是,这并不直接对C时不创建工作字符阵列附加(隐含)复制:

 字符串reverse_string(字符串常量和放大器;旧){
    返回的字符串(old.rbegin(),old.rend());
}

COUT<< reverse_string(你好)<< ENDL;
 

Working through some programming interview challenges I found online, I had to write an algorithm to reverse a const char * and return a pointer to a new char *. I think I have it, but to make it work properly I had to do some wonky stuff - basically having to account for the null-terminating character myself. Somehow I feel this is wrong, but I'm stumped, and I was wondering if someone could help me out:

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 from <algorithm> works for strings and char arrays:

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

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

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

/EDIT: This, of course, modifies the original string. But STL to the rescue. The following creates a new reversed string. Unfortunately (?), this doesn't work directly on C char arrays without creating an additional (implicit) copy:

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

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

这篇关于如何改善这种算法? (三串反转)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆