【发布时间】:2012-10-13 21:03:32
【问题描述】:
这个问题已经在 SO:.这是我使用反转字符串然后反转单词的传统算法的 STL 函数的版本。有没有更优雅的解决方案而不使用循环?
std::string something;
std::getline(std::cin, something);
std::reverse(something.begin(), something.end());
for (size_t i = 0, size_t nextPos = something.find_first_of(' ', i);
nextPos != std::string::npos; i = nextPos + 1,
nextPos = something.find_first_of(' ', i)) {
std::string::iterator startIter = something.begin() + i;
std::string::iterator endIter = something.begin() + nextPos;
std::reverse(startIter, endIter);
}
假设输入是完美的,句子前后没有空格,单词之间只有一个空格。有不需要循环的stl方案吗?
最好, 亚布拉曼尼亚
【问题讨论】:
-
我发现循环很丑,而且代码不可读!
-
当然,很想看到一个!
-
抱歉,我错过了“就地”部分。我会使用
std::rotate和std::reverse,但它看起来与您的代码并没有太大的不同。不过,我会考虑一下,如果我想出我喜欢的东西,我会发布它。 -
我发布了一个单循环就地算法。它假设每个单词后面正好有一个空格,包括最后一个。如果你不喜欢长的
for循环头,你可以把条件放在循环里面,break。
标签: string stl stl-algorithm c++-standard-library