为了解决我在网上发现的一些编程面试挑战,我不得不编写一个算法来反转 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/