本功能是通过QString方法分割字符串。
本文以切割路径为例子,最后得到文件名字
QString ParseFilePathToGetFileName(QString strInputFilePath)
{
QString strTxtFilePath;
if (strInputFilePath.isEmpty())
return strTxtFilePath;
QString strFileType, strWaringText;
//去掉“\\”如果路径为C:\Users\admin\Desktop ,那么将会转换成C:/Users/admin/Desktop
strInputFilePath = strInputFilePath.replace('\\', '/');
QStringList strlist = strInputFilePath.split("/");
strTxtFilePath = strlist.last();
return strTxtFilePath;
}
也给大家分享集中方式
一、用strtok函数进行字符串分割
原型: char *strtok(char *str, const char *delim);
功能:分解字符串为一组字符串。
#include <string.h>
#include <stdio.h>
int main () {
char str[80] = "This is - https://editor.csdn.net - website";
const char delim[2] = "-";
char *token;
/* 获取第一个子字符串 */
token = strtok(str, delim);
/* 继续获取其他的子字符串 */
while( token != NULL )
{
printf( "%s\n", token );
token = strtok(NULL, delim);
}
return 0;
}
二、用STL进行字符串的分割
涉及到string类的两个函数find和substr:
1、find函数
原型:size_t find ( const string& str, size_t pos = 0 ) const;
功能:查找子字符串第一次出现的位置。
参数说明:str为子字符串,pos为初始查找位置。
返回值:找到的话返回第一次出现的位置,否则返回string::npos
2、substr函数
原型:string substr ( size_t pos = 0, size_t n = npos ) const;
功能:获得子字符串。
参数说明:pos为起始位置(默认为0),n为结束位置(默认为npos)
返回值:子字符串
std::vector<std::string> split(std::string str,std::string pattern)
{
std::string::size_type pos;
std::vector<std::string> result;
str += pattern;//扩展字符串以方便操作
int size = str.size();
for(int i = 0; i < size; i++)
{
pos=str.find(pattern, i);
if(pos < size)
{
std::string s = str.substr(i, pos-i);
result.push_back(s);
i = pos;
}
}
return result;
}
三、用Boost进行字符串的分割
std::vector<std::string> split(std::string str,std::string s)
{
boost::regex reg(s.c_str());
std::vector<std::string> vec;
boost::sregex_token_iterator it(str.begin(), str.end(), reg, -1);
boost::sregex_token_iterator end;
while(it != end)
{
vec.push_back(*it++);
}
return vec;
}
BOOST的安装和下载请参考https://blog.csdn.net/qq_22606043/article/details/115524539