使用 C++ 反转句子中的每个单词需要对我的代码片段进行代码优化
Posted
技术标签:
【中文标题】使用 C++ 反转句子中的每个单词需要对我的代码片段进行代码优化【英文标题】:Reverse each word in a sentence using C++ need code optimization for my code snippet 【发布时间】:2015-10-08 16:52:38 【问题描述】:我有下面这句话
"Where are you going"
我希望每个单词都应该在如下所示的句子中颠倒
"erehW era uoy gniog"
提前致谢。
#include "stdafx.h"
#include "conio.h"
#include <string.h>
#include <iostream>
using namespace std;
//反转函数
void reverse(char* sentence)
int hold, index = 0;
//这里我们调用while循环
while (index >= 0)
//循环遍历句子直到null终止
while ( sentence[index] != ' ')
if(sentence[index] == '\0')
break;
index++;
hold = index + 1;
index--;
/*
In your original code,
This while loop(below) will continue to keep decrementing index
even below `0`,You wont exit this while loop until you encounter a ` `.
For the 1st word of the sentence you will never come out of the loop.
Hence the check, index>=0
*/
while (index >= 0 && sentence[index] != ' ')
cout << sentence[index];
index--;
cout<<" ";
index = hold;
if(sentence[hold-1] == '\0')
index = -1;
//main function
int main()
char* sentence = new char[256];
cin.getline(sentence, 256);
reverse(sentence);
delete[] sentence; // Delete the allocated memory
【问题讨论】:
请修正您的代码格式,这个问题目前几乎无法阅读。 @prakash 为什么你认为你需要优化? 我使用了很多循环。它会影响性能。 你现在有比优化代码更大的问题,例如你必须解决像#include "conio.h"
这样的问题,而不是先传递数组的长度。此外,将代码更改为使用 c++ std::string
将比进行微优化更好地利用您的时间。
@prakash 代码太多了。见这里:ideone.com/S6hmd0
【参考方案1】:
对于这样的任务,处理器基本上保证受 I/O 限制,几乎不管您执行反转本身的速度有多慢(在这种情况下,读取/写入主内存计为 I/O) .
因此,主要的优化是使代码尽可能简单易读。考虑到这一点,我将从以下内容开始:
std::string reverse_words(std::string const &input)
std::istringstream buffer(input);
std::ostringstream result;
std::transform(std::istream_iterator<std::string>(buffer),
std::istream_iterator<std::string>(),
std::ostream_iterator<std::string>(result, " "),
[](std::string const &in) return std::string(in.rbegin(), in.rend()); );
return result.str();
如果(且仅当)分析代码向我表明这是一个瓶颈,我会担心将其更改为其他“更有效”的东西。
【讨论】:
以上是关于使用 C++ 反转句子中的每个单词需要对我的代码片段进行代码优化的主要内容,如果未能解决你的问题,请参考以下文章