c++不是简化的语言,要实现一个功能,相对于其他许多语言来说,譬如python,c++最后的代码会很多。尤其是其他语言一行代码就可以实现的功能,c++却要经过各种转换。但是如果已经确定了用c++,一些繁杂而又基础的东西是我们不得不记在脑子里的,这样就不会每次用起来的时候怕出错而去查具体用法导致时间的浪费。掌握这些基本的技巧后,无论是在工作中,还是做笔试题的时候,都会让我们的思路卡在处理基本语法问题上。本篇文章主要讲述流的问题。
1.用流拼接字符串:sstream
在python中,拼接字符串是一件很简单的事情:
s1 = "python"
num = 1024
stringItem = "test"+s1+str(1024)
可以说,万能的str()函数让我们无往不利。但是c++中,你要记住各个类型转string的函数,以及函数的头文件,还有c风格字符串和string两者的不同。然而,stringstream解决了这个问题。
#include<sstream>
using namespace std;
bool stringPro()
{
istringstream iss;
iss.str(""); //这个主要是清除iss里面已有的内容,如果没有内容,可以不调用;
//每一次使用iss的时候调用一下是一个好习惯
string s1 = "test";
int tempInt = 1024;
iss<<s1<<tempInt<<"abc"; //此时iss里面已经是"test1024abc"了
//如果想用的话怎么办?用str();
string iss2string = iss.str();
}
2.字符串与各个类型变量的粘合剂:getline()
笔试题或者工作中,经常会处理输入问题:从输入设备(文件或者cin)读取数据,并且赋值给指定的参数。在这种情形中,getline()函数可以使我们的工作变得轻松。
#include <string> //getline函数在string头文件中
using namespace std;
istream& getline (istream& is, string& str, char delim);
istream& getline (istream&& is, string& str, char delim);
istream& getline (istream& is, string& str);
istream& getline (istream&& is, string& str);
可以看到,此函数就是从一个输入流中读取数据,读到一个字符串中。在默认情况下,是遇到'\n'自动停止,如果想要用其他字符分界,就要带上第三个参数。
//data.csv
/*
1,2,3,4,5
......
*/
//read.cpp
fstream fs("data.csv");
string lineString;
while(getline(fs,lineString))//获取csv里面的一行数据
{
istringstream iss(lineString);
string tempString;
vector<string> vstr;
while(getline(iss,tempString,','))//将这一行数据用','进行拆分
{
vstr.pushback(tempString);
}
//再对数据进行所需的处理
//......
}
attention:本文中的样例是直接在优快云中编辑的,只为了说明使用方法,没有实跑过。如果自己跑不通的话,也许是本文代码有问题。欢迎指正留言,我会对出现错误的地方进行改正。