1、如何获取某个工程文件夹下的所有文件:
一般是使用_findfirst这个结构体,但是这个结构体的在不同系统上的使用方法有点不同。在win10系统上的使用代码如下:
void getFiles(string path, vector<string>& files)
{
/*files存储文件的路径及名称(eg. C:\Users\WUQP\Desktop\test_devided\data1.txt)
ownname只存储文件的名称(eg. data1.txt)*/
//文件句柄
long long hFile = 0; //这个变量要双long,如果是单个的话会报错。在win7系统下是不会的
//文件信息
struct _finddata_t fileinfo;
string p;
if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -1)
{
do
{
//如果是目录,迭代之
//如果不是,加入列表
if ((fileinfo.attrib & _A_SUBDIR))
{ /*
if(strcmp(fileinfo.name,".") != 0 && strcmp(fileinfo.name,"..") != 0)
getFiles( p.assign(path).append("\\").append(fileinfo.name), files, ownname ); */
}
else
{
files.push_back(p.assign(path).append("\\").append(fileinfo.name));
}
} while (_findnext(hFile, &fileinfo) == 0);
_findclose(hFile);
}
}
void normalizeImg(char* positivePath)
{
vector<string> files;
获取该路径下的所有文件
getFiles(positivePath, files);
char str[30];
int size = files.size();
for (int i = 0; i < size; i++)
{
Mat src = imread(files[i]);
cv::resize(src, src, Size(40, 40));
imwrite(files[i], src);
cout << files[i].c_str() << endl;
}
}
注意:这里主要是那个 long long hFile = 0;变量,其要求定义为long long,否则在win10系统上运行会报错
2、关于结构体使用sort进行排序方法:
#include <iostream>
#include<iostream>
#include<vector>
#include<stdlib.h>
#include<algorithm>
struct Pointown
{
int x;
int y;
//重载‘<’运算符
bool operator<(const Pointown&item)const {
return y < item.y; //对比传入的数据跟本数据大小,然后返回bool类型
};
};
int main()
{
Pointown p1, p2, p3;
p1.x = 20;
p1.y = 500;
p2.x = 10;
p2.y = 600;
p3.x = 30;
p3.y = 700;
std::vector<Pointown>vecP;
vecP.push_back(p1);
vecP.push_back(p2);
vecP.push_back(p3);
//这里进行反序排序,即大排到小。使用begin、end等则是从小排到大。
std::sort(vecP.rbegin(), vecP.rend());
std::cout << "Hello World!\n";
}
3、int转string的函数为to_string:
int j=2;
string name = "data" + std::to_string(j);
注意:这里的to_string是可以实现int、float、doule转string。
4、string转float函数为stof:
iter_flag->colorPrice[plateColor] = std::stof(platePrice);
其中string转int的函数为:stoi;转double为:stod
5、strtoul函数简介
其主要把字符串转换成数字,可以转换成自己需要的数字格式。
例子:
#include <iostream>
#include <stdlib.h>
using namespace std;
int main(int argc ,char* argv[])
{
char* erjinzhi="1111";
int shijinzhi=strtoul(erjinzhi,0,2);
cout<<shijinzhi;return 0;
}