C++getline()和自定义Split()

本文详细介绍了C++中getline()函数的工作原理,以及如何基于getline()实现自定义Split()函数以处理不同字符分割字符串,特别提到在LeetCode题目中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

getline()和自定义Split()函数(以及stringstream流)

本文主要介绍了C++的getline()以及基于getline()定义下的Split()函数,及其使用说明。

getline()

首先,getline()函数的原型如下:

头文件:

#include<string>

istream& getline(istream &is , string &str,char delim);

其中,

&is表示一个输入流,比如说cin。

(较常见的 getline(cin,str) )

&str表示把从输入流中读入的字符串存放在str这个字符串中。

delim表示遇到这个字符停止读入。(默认为’\n’,即遇到回车停止读入)

Example1:

getline(cin, line, '#');

此时输入“Hello#World”时,输入流只读入了“Hello”,后面的并没有存放到line字符串中。

Example2:

while(getline(cin, line))

此时默认’\n’停止读入。

在这个语句中,首先getline从标准输入设备上读入字符,然后返回给输入流cin,所以while判断语句的真实判断对象是cin,也就是判断当前是否存在有效的输入流。(并不是line是否为空,所以无法通过输入一个空的line达到跳出循环的目的)。

所以,以下写法永远不能退出while()循环:

while(getline(cin, line))
    cout << line << endl;
Split()

在做LeetCode 824题山羊拉丁文时,需要使用类似Java库函数中的split()函数。

如果仅仅以空格分割字符串,可直接使用stringstream即可,因为stringstream默认就是用空格分割字符串的。

自定义Split()函数实现:

vector<string> Split(string s) {
	vector<string> result;
	stringstream ss(s);
	string str;
	while (ss >> str) 
		result.emplace_back(str);
	return result;
}

如果要用其他特殊字符分割字符串,需要用getline()。

自定义Split()函数实现:

vector<string> Split(string s, char c) {
        vector<string> result;
        stringstream ss(s);
        string str;
        while(getline(ss, str, c)) {
            result.push_back(str);
        }
        return result;
    }

在主函数中调用Split()函数,将分割后的字符串存储在字符串数组中。

vector<string> strs = Split(sentence, ' ');

stringstream参考博文:
http://t.csdn.cn/FG3qShttp://t.csdn.cn/ZfFue

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值