求拆分字符串的函数 例如:abc$中国$12345$,。‘ 用$号拆分,急,帮忙!
如题
注意:应考虑中英文、数字、符号组合的情况
问题点数:100、回复次数:12Top
1 楼bobob(静思)回复于 2005-11-14 16:24:12 得分 15
CString str = "abc$中国$12345$,。‘ ";
char a1[8],a2[8],a3[8],a4[8];
sscanf(str,"%[^$]$%[^$]$%[^$]$%[^&]",a1,a2,a3,a4);
AfxMessageBox(str);
AfxMessageBox(a1);
AfxMessageBox(a2);
AfxMessageBox(a3);
AfxMessageBox(a4);Top
2 楼slackwater(山林风雨)回复于 2005-11-14 16:31:09 得分 5
楼上倒是简单Top
3 楼vipfenghuang(张伟)回复于 2005-11-14 16:44:59 得分 0
感谢!还有其他方法吗?Top
4 楼38062708(土豆精)回复于 2005-11-14 16:48:15 得分 15
void GetStrsFromStr(CString str,CString maskstr,CStringArray &ary)
{
ary.RemoveAll();
int indextemp,indexfront;
CString strtemp;
indextemp = 0;
indexfront = 0;
while(1)
{
indextemp = str.Find(maskstr,indexfront);
if (indextemp == -1)
indextemp = str.GetLength();
strtemp = str.Mid(indexfront,indextemp-indexfront);
ary.Add(strtemp);
indexfront = indextemp + 1;
if (indexfront >= str.GetLength())
break;
}
}
CStringArray ary;
GetStrsFromStr(str,"$",ary);Top
5 楼bobob(静思)回复于 2005-11-14 16:53:54 得分 5
如果$的个数不定的话也可以用sscanf循环处理Top
6 楼Mackz(在相互)回复于 2005-11-14 16:54:37 得分 15
CStringT::Tokenize
CStringT Tokenize(
PCXSTR pszTokens,
int& iStart
) const;
Parameters
pszTokens
A string containing token separators.
iStart
The zero-based index to begin the search.
Return Value
A CThisString object containing the current token value.
Remarks
Call this function to search for tokens in the given string. The pszTokens is a string containing the token separators. Parsing of the target string begins at the iStart position.
Example
The following example demonstrates the use of CStringT::Tokenize.
//typedef CStringT< TCHAR, StrTraitATL< TCHAR > > CAtlString;
CAtlString str( "%First Second#Third" );
CAtlString resToken;
int curPos= 0;
resToken= str.Tokenize("% #",curPos);
while (resToken != "")
{
printf("Resulting token: %s\n", resToken);
resToken= str.Tokenize("% #",curPos);
};
Output
Resulting Token: First
Resulting Token: Second
Resulting Token: Third
Top
7 楼vipfenghuang(张伟)回复于 2005-11-14 17:18:14 得分 0
多谢各位!!!Top
8 楼T97102003(池塘里的水手)回复于 2005-11-14 17:21:30 得分 15
CString str = "abc$中国$12345$,。‘ ";
CStringArray szArray;
CString szTemp;
int i=0;
while(AfxExtractSubString( szTemp, str, i++, '$'))
{
szArray.Add(szTemp);
}
Top
9 楼vipfenghuang(张伟)回复于 2005-11-14 17:22:26 得分 0
顺便问一句就结贴, 38062708(一个人始终不快乐) 的自己写的函数
与sscanf()函数效率方面哪个高些???Top
10 楼xiao_fang(frank)回复于 2005-11-14 17:33:40 得分 10
推荐M$提供的内部函数:AfxExtractSubString :)
$个数不定如何循环呀?先Find一下看有没有,再来scanf ?Top
11 楼bobob(静思)回复于 2005-11-14 17:47:43 得分 10
先用sscanf提取第一个$前的段,然后再提取第二个
使用如下语法:sscanf(str,"%[^$]$%s",a1,a2);Top
12 楼lemon_wei(研究BT,做好P2P)回复于 2005-11-14 18:28:53 得分 10
http://community.csdn.net/Expert/topic/4383/4383809.xml?temp=.6852381Top




