#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(); }
C++的string类型可以很方便的操作字符串,但是在使用中发现不支持Split,为了满足使用的需要,我自己写了一个分割函数。
-
-
-
-
-
-
-
-
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)
-
-
-
-
-
-
-
string::size_type start = 0, index;
-
-
index = str.find_first_of(separator,start);
-
-
-
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);
-
-
-
substring = str.substr(start);
-
dest.push_back(substring);
-
测试:
-
-
vector<string>::iterator iter;
-
-
-
-
-
-
-
for (iter=ster.begin();iter!=ster.end();iter++)
-
-
-
-
-
-
-
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)
-
-
-
-
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*
-
-
-
-
-
int num = strlen(diffe.c_str()) +1;
-
-
-
char* strchar1 = new char[num];
-
memcpy(strchar1, diffe.c_str(), num);
-
-
-
-
-
-
-
-
-
-
- https://blog.csdn.net/l198738655/article/details/81356915
|
请发表评论