问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

MFC中几种常用的字符串分割方法

发布网友 发布时间:2022-04-26 07:48

我来回答

1个回答

热心网友 时间:2022-04-14 18:57

1、CString 自带的函数Tokenize

CStringT Tokenize( _In_ PCXSTR pszTokens, _Inout_ int& iStart ) const

功能介绍:从iStart位置取出字符串中含pszTokens分割符间的内容;istart是开始分割的位置,一般设为0,下面是一段运用实例:

vector<CString> SplitCString(CString strSource, CString ch){ vector <CString> vecString; intiPos = 0; CString strTmp; strTmp = strSource.Tokenize(ch,iPos); while(strTmp.Trim() != _T("")) { vecString.push_back(strTmp); strTmp = strSource.Tokenize(ch,iPos); }}

上述函数将字符串strSource按照字符串ch进行分割,分割得带的子字符串放到vector中。其中函数中的iPos是不断变化的,而Tokenize本身不会改变源字符串。
2、char *strtok(char s[], const char *delim);
功能介绍:分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。首次调用时,s指向要分解的字符串,之后再次调用要把s设成NULL。从s开头开始的一个个被分割的串。当查找不到delim中的字符时,返回NULL。所有delim中包含的字符都会被滤掉,并将被滤掉的地方设为一处分割的节点。下面是一段运用实例。

vector<CString> SplitCString(CString strSource, charch){ vector<CString> vecString; CString strTmp=strtok((LPSTR)(LPCTSTR)strSource,ch);//(LPSTR)(LPCTSTR)将CString转char* while(1) { strTmp=strtok(NULL,ch); if(strTmp==_T("")) break; strTmp.TrimLeft(); vecString.push_back(strTmp); }}

与第一种方法有一点区别,上述函数第二个参数是char型的,第一种方法的第二个可以是CString型的,但是实现的功能相似。
3、BOOL AFXAPI AfxExtractSubString ( CString& rString, LPCTSTR lpszFullString, int iSubString, TCHAR chSep = ‘\n’);
功能介绍:可用于从特定源字符串中提取子字符串。如果函数成功提取了该子字符串中提供的索引,返回TRUE 否则返回FALSE。其中
// rString 对CString将得到一个单独的子字符串的对象。
// lpszFullString 待分割的字符串。
// iSubString 提取的子字符串的序号,从0开始。假如你想提取第3段,该参数就输入2
// chSep 用于分割的字符,默认的是’\n’。
下面是一段运用实例

vector<CString> SplitCString(CString strSource, charch){ CString strTmp; vector<CString> vecString; intiPos=0; while(AfxExtractSubString(strTmp,strSource,iPos,ch)) { iPos++; vecString.push_back(strTmp); } returnvecString;}

特别注意:strtok在分割的时候将分割符改变成‘/0’了,所以这个函数会修改源字符串,分割符不会包含在分割出来的字符串中,strtok允许多分割字符,比如空格+逗号表示为‘ ,’,还有一点需要注意的是如果被分割的字符第一个是分割符,那么该字符会被忽略掉。如果出现连续的分隔符,那么也会忽略掉,比如字符串1|2||||3,用strtok来分割将得到1 2 3,但是如果用AfxExtractSubString,得到将会是1 2 空字符串 空字符串 空字符串 3,需求不同选择不同的函数。
4、利用CString Find函数自己分割字符串

vector<CString> SplitCString(CString strSource, charch){ CString strTmp; vector<CString> vecString; intn=-1; n=strSource.Find(ch) while(n!=-1) { strTmp=strSource.Left(n)//这里根据需要判断是否需要分隔符 vecString.push_back(strTmp); strSource=strsource.left(strSource.Getlenth-n+1) n=strSource.Find(ch); } returnvecString;}

这种方法功能和上述类似,使用也很灵活,可以根据自己需要分割字符串。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
ef英语哪个好 EF英孚英语培训怎么样? 英孚英语好不好 EF英孚教育到底好不好 大佬们,麦芒7和荣耀10那个值得入手?2500以下的机子还有啥好推荐的么... 介绍几款2500元以前的手机 像素一定要高 其他的不做要求 近期想入手一部安卓手机,价格2200到2500左右…买HTC desire Z还是 三星... 笔记本忘记开机密码怎么办急死了 笔记本电脑屏幕开机锁忘记密码 怎么办?急死了 华硕笔记本电脑开机密码忘记了怎样找回?系统是Windows 7旗舰版... 求助分割字符串实现方法 java如何分割字符串 字符分割的方法有哪些 中外贫富差距扩大的原因 美团充电宝免押在哪里看自己的评价? 怎么把输入的字符串分割 贫富差距最大的国家 如何把一个字符串分割成多个字符串 世界上贫富差距最大的是哪个国家?最小的呢? 提醒win10给更新,更不更,是不是越更越卡 世界上贫富差异最悬殊的国家 现在世界上哪个国家的贫富差距最大 怎样把win10的自动更 到底哪个国家贫富差距最大 目前全世界贫富差距最小的国家与城市是 世界上贫富差距最小的国家是哪个 为什么说俄罗斯是世界上贫富差距最大的国家呢? 贫富差距最大的国家? 世界上哪个国家的贫富差距最大? 报道说印度是*差距严重的国家,那他们的*差距到底有多大? linux的vi和vim显示中文乱码怎么办? 字符串分割 如何根据java根据指定的字符,分割字符串? linux vi编辑时,中文乱码 C语言如何实现分割字符串为一个个单独的字符并保存 linux中vi /usr/sbin/vsftpd出现乱码是怎么回事 C语言以逗号分割字符串 java分割字符串 Linux 字符终端下vi编辑器菜单都是乱码,打开包含中文的文档也是乱码 用C语言分割字符串 linux ubuntu 安装vim出错(有图为证) linux系统中vim打开一个从windows系统下编辑的.c程序,重新写注释后保存,提示:转换错误,已写入,求解 putty连接linux,vim有时显示混乱(不是乱码),甚至出现串行,显示的和实际内容不同,请问如何解决?谢谢 怎么分辨肉是否新鲜,怎么挑选比较好的生肉? 猪肉怎么分辨新鲜与否? 如何分辨猪肉的好坏 如何辨别猪肉的好坏? 如何恢复苹果电脑出厂设置 苹果电脑怎样恢复出厂设置? 把什么写进青春里作文怎么写?