文章目录
C++常用函数总结
1、结构体struct构建
typedef struct pointLlinetype
{
Point2f point_begin;
Point2f point_end;
string line_type;
}PointLineType;
2、find、substr函数—读取csv/txt文档内容,并做字符串拆分等处理
https://www.jianshu.com/p/5876a9f49413 —字符串拆分的几种常用方法
string line = "253 L11 9001 9001 LINESTRING(116.2091339 40.1863420 48.581,116.2091298 40.1863267 48.551)"
int str_begin = line.find('(');
int str_end = line.find(')');
int str_len = line.size();
string line_cut = line.substr(str_begin + 1, str_end - str_begin - 1); //将每一行()内的坐标点取出,为字符串格式
cout << line_cut <<endl;
输出: 116.2091339 40.1863420 48.581,116.2091298 40.1863267 48.551
find/find_first_of/find_last_of详解
str1.find(str2); // 从串str1中查找时str2,返回str2中首个字符在str1中的地址
str1.find(str2,5); // 从str1的第5个字符开始查找str2
str1.find("usage"); // 如果usage在str1中查找到,返回u在str1中的位置
str1.find("o"); // 查找字符o并返回地址
str1.find("of big",2,2); // 从str1中的第二个字符开始查找of big的前两个字符
str.find_first_of(str1,pos)
//说明:从pos位置开始查找str1,从前往后,只要查到str1中的任何一个字符有则返回其在str中的索引值
str.find_last_of(str1,pos)
说明:从pos位置开始查找,从后往前,查到str1中的任何一个字符则返回其str中的索引值
substr详解:
string s("12345asdf");
string a = s.substr(0,5); //获得字符串s中从第0位开始的长度为5的字符串
cout << a << endl;
>>> 12345
1. 形式:s.substr(pos, n)
2. 解释:返回一个string,包含s中从pos开始的n个字符的拷贝(pos的默认值是0,n的默认值是s.size() - pos,即不加参数会默认拷贝整个s)
3. 补充:若pos的值超过了string的大小,则substr函数会抛出一个out_of_range异常;若pos+n的值超过了string的大小,则substr会调整n的值,只拷贝到string的末尾
3、stringstream函数—分割字符串
string line = "116.2091339,40.1863420,48.581,116.2091298,40.1863267,48.551";
stringstream line_stream(line); //转为数据流
string temp;
while (getline(line_stream, temp, ',')) //读取每行,按“,”分割,并保存到temp
{
}
4、查找路径path/file/csv是否存在,不存在。。。
1、查看文件是否存在,若存在则报错
filepath = "/.../.../x.csv";
ifstream file;
file.open(filePath.c_str());
if (!file){
cerr << "打开.csv文件失败";
}
2、判断图片是否存在,若不存在,则创建图片
void create_img(string img_save_path, int resolution)
{
fstream _file;
_file.open(img_save_path, ios::in);
if (!_file)
{
Mat img(resolution, resolution, CV_8UC3, Scalar(255, 255, 255));
cv::imwrite(img_save_path, img);
}
}
3、查看文件夹是否存在,若不存在则创建
#include <io.h>
#include <direct.h>
img_path = "xxx/yyy/..."
if (_access(img_path.c_str(), 0) == -1) //如果文件夹不存在
_mkdir(img_path.c_str()); //则创建
4、查看csv是否存在,不存在则新建,并写入东西
string csv_path = "C:/Users/xujun/Desktop/C++/Findcontours/point2.csv";
//打开or新建csv
ofstream file;
file.open(csv_path, ios::out);
file << "write1" << "_" << "..." << " ";
file.close();