注册 登录
编程论坛 VC++/MFC

求高手能帮忙指点一下关于CString字符串的分割函数

jiangkecai 发布于 2012-04-25 23:13, 2020 次点击
我在编写的一个程序中,有个问题就是按照逗号分割出来的字符串比较时有问题;

比如说如下定义:
CString str=_T("A,X1,1.359,1")//为要分割的字符串
CString s=_T("x1");
而将分割后的字符串放在一个动态数组中
CString* strTmp=new CString[MAX];
比如说将分割的出来的"x1"放在strTmp[1]里
可是将s与strTmp[1]进行比较时就有问题了

我做了个小测试:
bool flag=s==strTmp[1];
flag总是显示FALSE;
求高手指点呀!!!!!
本人的字符串分割函数代码如下:

CString * SplitString(CString str,char split,int &iSubStrs)
{
    int iPos=0;
    iSubStrs=1;
    for(iPos=str.Find(split);iPos!=-1;iPos=str.Find(split,iPos+1))
    {
        iSubStrs++;
    }
    CString *pstrString=new CString[iSubStrs];
    int iTemp=0;
    for(int i=0;i<(iSubStrs-1);i++)
    {
        iPos=str.Find(split,iPos+1);
        pstrString[i]=str.Mid(iTemp,iPos-iTemp);
        iTemp=iPos+1;
    }
    pstrString[(iSubStrs-1)]=str.Mid(iTemp,str.GetLength()-iTemp);
    return pstrString;
}
5 回复
#2
jiangkecai2012-04-25 23:33
怎么没人回复呀,急求高手指点呀!!!先谢过咯!!
#3
wube2012-04-26 10:11
当初我也遇到字串切割的问题~
可是以前不会用CString~
所以用C写了个"类似"VB6的Split字符串的功能~

程序代码:

//------------------------------------------------------------------------------------------------------------------//
int spritcount(char *strIn, const char *aaa)//计算字串中有多少分割符号
{
    int a = 0;
    unsigned int i=0;

    for(i=0; i<strlen(strIn); i++)
    {
        if (strIn[i] == aaa[0])
            a++;
    }
    return(a+1);    //符号数量+1=段落
}
//------------------------------------------------------------------------------------------------------------------//
int strSprit(char *strIn, char **strOut, const char *delim, int nSpritCount)
{
    char *temp;
    int j=0;
    temp = strtok(strIn, delim);
    while( j < nSpritCount )
    {
        strOut[j] = temp;
        j++;
        temp = strtok(NULL, delim);
    }
    return 0;
}


程序代码:

...
    Title = spritcount(CodeString, delim1);            //依delim1分段落
    strSprit(CodeString, part, delim1, Title);            //第一次分割(part[0],part[1])

    Paragraph = spritcount(part[1], delim2);            //依delim2分段落
    strSprit(part[1], part1, delim2, Paragraph);        //第二次分割(part[0]....part[Paragraph])
...


顺便帮你顶一下~
#4
jiangkecai2012-04-26 12:49
回复 3楼 wube
谢啦!这个问题是解决了,但还有些东西不是很清楚!用CString类中的Trim()函数可以解决这个问题,s.Trim()==strTemp[1].Trim();
但是对为什么这样还是不清楚,还希望有高手指教一下
#5
yuyouchun2012-05-02 18:06
路过
#6
wube2012-05-02 19:45
程序代码:

char *Trim(char *src)//等同VB6的Trim()
{
     int i = 0;
     char *begin = src;
     while(src[i]!='\0')
    {
    if(src[i]!=' ')
        break;
    else
        begin++;
        i++;
     }
     for(i=strlen(src)-1;i>=0;i--)
    {
    if(src[i]!= ' ')
        break;
    else
        src[i]='\0';
     }
     return begin;
}
1