【发布时间】:2010-09-19 03:57:46
【问题描述】:
我正在尝试遍历字符串中的单词。
可以假设字符串由空格分隔的单词组成。
请注意,我对 C 字符串函数或那种字符操作/访问不感兴趣。另外,请在您的回答中优先考虑优雅而不是效率。
我现在最好的解决方案是:
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main()
{
string s = "Somewhere down the road";
istringstream iss(s);
do
{
string subs;
iss >> subs;
cout << "Substring: " << subs << endl;
} while (iss);
}
有没有更优雅的方法来做到这一点?
【问题讨论】:
-
伙计...优雅只是在我的书中说“效率-看起来-漂亮”的一种奇特方式。不要仅仅因为它不包含在模板中而回避使用 C 函数和快速方法来完成任何事情;)
-
while (iss) { string subs; iss >> subs; cout << "Substring: " << sub << endl; } -
@Eduardo:这也是错误的......您需要在尝试流式传输另一个值和使用该值之间进行测试,即
string sub; while (iss >> sub) cout << "Substring: " << sub << '\n'; -
C++ 中默认执行此操作的各种选项:cplusplus.com/faq/sequences/strings/split
-
优雅不仅仅是高效。优雅的属性包括低行数和高易读性。恕我直言,优雅不是效率的代表,而是可维护性的代表。