获取字符串流的其余部分c++

qrjkbowd  于 2023-07-01  发布在  其他
关注(0)|答案(5)|浏览(106)

我有一个字符串流,我需要把第一部分取出来,然后把剩下的部分放到一个单独的字符串中。例如,我有一个字符串"This is a car",我需要以两个字符串结束:a = "This"b = "is a car"
当我使用stringstream使用<<获取第一部分时,然后我使用.str()转换为字符串,这当然给了我整个“This is a car"”。我怎样才能让它按我想的方式播放呢?

agxfikkp

agxfikkp1#

string str = "this is a car";

std::stringstream ss;
ss << str;

string a,b;
ss >> a;
getline(ss, b);

**编辑:**更正感谢@Cubbi:

ss >> a >> ws;

编辑:

这个解决方案可以在某些情况下处理换行符(比如我的测试用例),但在其他情况下(比如@rubenvb的例子)会失败,我还没有找到一个干净的方法来修复它。**我认为@tacp的解决方案更好,更强大,应该被接受。

9avjhtql

9avjhtql2#

你可以这样做:首先获取整个字符串,然后获取第一个单词,使用substr获取其余部分。

stringstream s("This is a car");
 string s1 = s.str();
 string first;
 string second;

 s >> first;
 second = s1.substr(first.length());
 cout << "first part: " << first <<"\ second part: " << second <<endl;

在gcc 4.5.3输出中测试:

first part: This 
second part: is a car
cedebl8k

cedebl8k3#

你可以在阅读第一个比特后对流执行getline

cyej8jka

cyej8jka4#

另一种方法是使用rdbuf:

stringstream s("This is a car");
string first;
stringstream second;

s >> first;
second << s.rdbuf();
cout << "first part: " << first << " second part: " << second.str() << endl;

如果您最终要将结果输出到流而不是字符串,这可能是一个不错的选择。

d4so4syb

d4so4syb5#

std::string str = "This is a car";

std::stringstream ss;
ss << str;

std::string start;
ss >> start;
std::string remaining = ss.str().substr(ss.tellg());

相关问题