背景:经常需要读取图像的文件,记录一下
1.getline用法
主要用于获取string中的一行,调用时可以设置单个的分隔符;其中单个的分隔符相当于行中的ifstream中的换行符"\n",依次读取分隔的字符.
getline在c++中有两种用法:
1)作为istream的成员函数,有两种重载形式:
istream& getline (char* s, streamsize n );
istream& getline (char* s, streamsize n, char delim );
作用是: 从istream中读取至多n个字符(包含结束标记符)保存在s对应的数组中。即使还没读够n个字符,如果遇到delim或 字数达到限制,则读取终止,delim都不会被保存进s对应的数组中。
#include <iostream>
#include <string>
int main(){
char name[256], wolds[256];
std::cout << "Please input your name: ";
std::cin.getline(name, 256); //默认遇到换行就停止
std::cout<<"your name:"<<name<<std::endl;
}
2)在中的getline函数有四种重载形式:
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);
返回值为istream类型:
读取的istream是作为参数is传进函数的。读取的字符串保存在string类型的str中。
函数的变量:
is :表示一个输入流,例如cin。
str :string类型的引用,用来存储输入流中的流信息。
delim :char类型的变量,所设置的截断字符;在不自定义设置的情况下,遇到’\n’,则终止输入。
#include <iostream>
#include <string>
#include <opencv2/opencv.hpp>
int main(){
ifstream f("color.txt");
if (!f.good())
{
std::cout << "Cannot open color file" << std::endl;
exit(-1);
}
//ifstream f("color.txt");
vector<cv::Scalar>color;
vector<int> v;
string line,number;
while(std::getline(f, line))
{
istringstream is(line);
while(std::getline(is, number, ','))
{
v.push_back(atoi(number.c_str()));
}
colors.push_back(cv::Scalar(v[0],v[1],v[2]));
v.clear();
}
}