基於std::string的字符串處理

/********************************************************************************************* * 文件:StringLib * 功能:基於的std::string實現的常用字符串操作,字符串分割,替換等 * 作者:張曉東 * 時間:2012-11-19 * 修改:2012-11-19完成初步版本,實現:字符串分割,字符串替換,提取文件路徑,文件名字,文件擴展名 *********************************************************************************************/

#ifndef   _StringLib_h #define   _StringLib_h

#include <string> using namespace std;

#ifdef _cplusplus extern "C" { #endif

//從字符串str中,使用pattern進行分割,並存儲到strVec中 bool StringSplit(std::string src, std::string pattern, std::vector<std::string>& strVec) {  std::string::size_type pos;     src +=pattern;//擴展字符串以方便操作     int size=src.size();    for(int i=0; i<size; i++)  {    pos = src.find(pattern,i);    if(pos<size)    {    std::string s=src.substr(i,pos-i);    strVec.push_back(s);    i=pos+pattern.size()-1;    }  }

 return true; }

//將字符串str中的所有target字符串替換爲replacement bool StringReplace(std::string& src, std::string target, std::string replacement) {  std::string::size_type startpos = 0;   while (startpos!= std::string::npos)   {    startpos = src.find(target);   //找到'.'的位置     if( startpos != std::string::npos ) //std::string::npos表示沒有找到該字符     {      src.replace(startpos,1,replacement); //實施替換,注意後面一定要用""引起來,表示字符串     }   } 

 return true; }

//提取路徑中的文件名字(帶路徑,不帶擴展名) //substr字符串中,第一個參數爲截取的位置,第二個爲截取的長度 std::string StringGetFullFileName(std::string path) {  return path.substr(0, path.rfind('.') == std::string::npos ? path.length() : path.rfind('.') ); }

//提取路徑中的文件名字 std::string StringGetFileName(std::string path) {  StringReplace(path, "/", "\\");  std::string::size_type startpos = path.rfind('\\') == std::string::npos ? path.length() : path.rfind('\\')+1;  std::string::size_type endpos   = path.rfind('.') == std::string::npos ? path.length() : path.rfind('.');

 return path.substr(startpos, endpos-startpos); }

//提取路徑中文件名字(帶擴展名) std::string StringGetFileNameWithExt(std::string path) {  StringReplace(path, "/", "\\");  std::string::size_type startpos = path.rfind('\\') == std::string::npos ? path.length() : path.rfind('\\')+1;  return path.substr(startpos); }

//提取路徑中的文件路徑 std::string StringGetDirectory(std::string path) {  StringReplace(path, "/", "\\");  return path.substr(0, path.rfind('\\') == std::string::npos ? path.length() : path.rfind('\\') ); }

//提取路徑中的文件類型 std::string StringGetFileExt(std::string path) {  StringReplace(path, "/", "\\");  return path.substr(path.rfind('.') == std::string::npos ? path.length() : path.rfind('.')+1 ); }

#ifdef _cplusplus } #endif

#endif

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章