【发布时间】:2020-10-25 13:21:09
【问题描述】:
编辑 1
我忘了说字符串必须取自cin
我有一个字符串,例如“Hi; my;; name is Andrea; and I like C++”。
我想创建一个用该字符串初始化的字符串流,并在最后一个 ; 之前获取所有内容。
这是我尝试过的:
string ex("Hi; my;; name is Andrea;; and I like C++"), text, final_text;
stringstream loop_stream(ex);
int findComma = loop_stream.str().find(';');
do {
getline(loop_stream, text, ';');
loop_stream.ignore(1);
final_text += text;
loop_stream << loop_stream.rdbuf();
findComma = loop_stream.str().find(';');
while (findComma == 1) {
loop_stream.ignore(1);
}
findComma = loop_stream.str().find(';');
}
while (findComma != string::npos);
cout << "-" << final_text << "-" << endl;
但它根本不起作用......我希望输出是:
-Hi; my;; name is Andrea-
【问题讨论】:
-
为什么要做那些复杂的事情而不是仅仅搜索最后一个';'使用
string::rfind然后使用string::substr获取预期的子字符串? -
我认为 OP 不知道您可以从字符串末尾向后进行搜索。
-
如果您创建一个函数来解决问题,则字符串的来源没有区别。也许这也是您的代码比应有的复杂得多的原因——您试图编写将输入例程与字符串操作混合的代码。
标签: c++ string stream stringstream