#include<iostream>
#include<string>
#include<vector>
using namespace std;
//splitString函數的參數說明:
//返回值是分割后字符串數組大小
//strSrc 原始字符串
//strDelims 自定義的分割字符串的分割數組
//strDest 分割后的字符串數組,引用傳遞
int splitString(const string & strSrc, const std::string& strDelims, vector<string>& strDest)
{
typedef std::string::size_type ST;
string delims = strDelims;
std::string STR;
if(delims.empty()) delims = "/n/r";
ST pos=0, LEN = strSrc.size();
while(pos < LEN ){
STR="";
while( (delims.find(strSrc[pos]) != std::string::npos) && (pos < LEN) ) ++pos;
if(pos==LEN) return strDest.size();
while( (delims.find(strSrc[pos]) == std::string::npos) && (pos < LEN) ) STR += strSrc[pos++];
//std::cout << "[" << STR << "]";
if( ! STR.empty() ) strDest.push_back(STR);
}
return strDest.size();
}
int main()
{
string testStr = "提供關於_開發業 界,軟件業界,-移動業界,雲計算業界的權威報道,為業界產 品經理,業界開發 者,";
string delims = ",- _ ,,"; //定義分割數組,可以定義多個分隔符,如" ,./r"等
vector<string> splitStrs; //把分割后的字符串存在vector里面
splitString(testStr,delims, splitStrs); //調用自定義的分割函數
//顯示分割后的字符串數組(用vector存儲)
vector<string>::iterator iter;
for (iter = splitStrs.begin(); iter != splitStrs.end(); ++iter) {
cout << "|" << *iter << "|/n";
}
splitStrs.clear();
}
https://blog.csdn.net/liuyinghui523/article/details/40082437
C++的string類型可以很方便的操作字符串,但是在使用中發現不支持Split,為了滿足使用的需要,我自己寫了一個分割函數。
-
-
-
using std::string; //使用string對象
-
using std::vector; //使用vector
-
-
-
-
void Split(const std::string& src, const std::string& separator, std::vector<std::string>& dest);//函數原型
-
-
-
void Split(const std::string& src, const std::string& separator, std::vector<std::string>& dest) //字符串分割到數組
-
{
-
-
//參數1:要分割的字符串;參數2:作為分隔符的字符;參數3:存放分割后的字符串的vector向量
-
-
string str = src;
-
string substring;
-
string::size_type start = 0, index;
-
dest.clear();
-
index = str.find_first_of(separator,start);
-
do
-
{
-
if (index != string::npos)
-
{
-
substring = str.substr(start,index-start );
-
dest.push_back(substring);
-
start =index+separator.size();
-
index = str.find(separator,start);
-
if (start == string::npos) break;
-
}
-
} while(index != string::npos);
-
-
//the last part
-
substring = str.substr(start);
-
dest.push_back(substring);
-
}
測試:
-
vector<string> ster;
-
vector<string>::iterator iter; //聲明一個迭代器
-
string girl="春哥|胯下神駒";
-
string Insta;
-
CString pourin;
-
-
Split(girl, "|",ster);
-
-
for (iter=ster.begin();iter!=ster.end();iter++)
-
{
-
-
-
Insta=*iter;
-
pourin=toCString(Insta); //自定義的把string轉為CString的函數
-
-
OutputDebugString(pourin+ L"\n");//調試輸出
-
-
}
string類型替換字符串函數:
string類型的默認替換字符串函數需要使用者給出需要替換的字節數,以及替換多少次,非常詳細,但是用起來也非常麻煩,故而在網上找到一個一次性替換所有待替換字符串的函數。
-
void StringReplace(std::string &strBase, std::string strSrc, std::string strDes);
-
-
-
void StringReplace(string &strBase, string strSrc, string strDes)
-
{
-
//參數1:待修改的字符串;參數2:要替換的內容;參數3:替換后的內容,比如把AA替換成BB,這里要填的是BB
-
//替換完后會返回給原字符串變量也就是strBase。
-
string::size_type pos = 0;
-
string::size_type srcLen = strSrc.size();
-
string::size_type desLen = strDes.size();
-
pos=strBase.find(strSrc, pos);
-
while ((pos != string::npos))
-
{
-
strBase.replace(pos, srcLen, strDes);
-
pos=strBase.find(strSrc, (pos+desLen));
-
}
-
}
LPCTSTR不是一個類型,而是兩種類型:LPCSTR和LPCWSTR其中之一。會根據你當前程序是否使用UNICODE字符集來變成那二者之一。如果使用UNICODE字符集,則LPCTSTR = LPCWSTR,否則LPCTSTR = LPCSTR。
標准庫的std::string轉換成LPCSTR很簡單:直接調用c_str()即可。例:
std::string a="abc";
LPCSTR str = a.c_str();
標准庫還有一個wstring,代表寬字符的string,std::wstring轉換成LPCWSTR也一樣很簡單:
std::wstring a = L"abc";
LPCWSTR str = a.c_str();
如果要是std::string轉換成LPCWSTR或者std::wstring轉換成LPCSTR那就比較麻煩了,需要調用MultiByteToWideChar或WideCharToMultiByte進行 字符集之間的轉換。不過大多數時候不需要這種交叉轉換,一個程序一般只會使用一種字符集。
C++或MFC中關於轉義字符的處理
D:\XKey\XKey.exe
比如上面這個地址,按照C++編譯器的標准"\"屬於轉義符,需要替換成"\\"來表示,但這只是在C++的源碼中需要這樣表示,如果用API讀取文本中的地址,編譯后\就還是\不需要再替換成\\。
也就是說只有在代碼中寫的"D:\\XKey\\XKey.exe"這種地方才會有轉義字符,真正程序編譯完畢之后就不存在轉義的問題了。程序編譯完畢之后,上面的字符串就變為了C:\1.txt。另外在VC++中也可以用"/"替代"\\"來表示目錄層次,比如"D:/XKey/XKey.exe"也是可以編譯通過正常使用的,此時就不需要把"/"改成"//"了。
string字符串轉char*
-
void Brow(string diffe)//string字符串轉char*
-
{
-
-
-
int num = strlen(diffe.c_str()) +1;//c_str()返回字符串首字符地址;strlen()從第一個字符開始往后統計直到遇到結束符\0,返回數到的字符數,但不包含\0.
-
//統計string字符串的長度
-
-
char* strchar1 = new char[num]; //動態創建一個字符數組,並返回地址給char* 指針;根據string字符串的長度動態申請相應的字節數組
-
memcpy(strchar1, diffe.c_str(), num); //從參數2中把字節拷貝到參數1中,拷貝多少個字節由參數3指定
-
-
if (strchar1!=NULL) //只要strchar1指針不為空用完后就釋放掉內存
-
{
-
delete []strchar1;
-
strchar1 = NULL;
-
}
-
-
-
-
}
- https://blog.csdn.net/l198738655/article/details/81356915
