CString str="是|1;我|0;人|2";每个字用;来分割用|后的数字来排序,这个问题该怎么办??排序后输出:我是人
这个问题好像有点难哦看看有人会不?

解决方案 »

  1.   

    提供思路,用find打到0,再向前移两个元素,可以得到我,同理可以得到其它,用一个for循环即可.
      

  2.   

    http://wenku.baidu.com/view/6070edd126fff705cc170a57.html  楼主看看这个,CString的成员函数,应该比较好解决
      

  3.   

    直接写一循环find(";"),然后再find("|")就可以解析出来了.
      

  4.   


    #define MAX_BUFFER 30
    CString strText=_T("是|1;我|0;人|2");
    CString strBuf[MAX_BUFFER] = {_T("")};
    CString strTmp(_T(""));
    int curPos = 0;
    LPCTSTR szToken = _T(";");
    LPCTSTR szGap = _T("|");
    int nCount = 0;
    while(_T("") != (strTmp = strText.Tokenize(szToken, curPos)))
    {
    int flag = strTmp.Find(szGap);
    if(-1 != flag)
    {
    strBuf[_ttoi(strTmp.Mid(flag+1))] = strTmp.Left(flag);
    }
    } CString strInfo(_T(""));
    for(int i=0; i<sizeof(strBuf)/sizeof(strBuf[0]); i++)
    {
    if(!strBuf[i].IsEmpty())
    {
    strInfo += strBuf[i];
    }
    }
    AfxMessageBox(strInfo);
      

  5.   


    CString str=_T("是|1;我|0;人|2");
    CString tmp;
    CString str1=_T("");
    int k;
    for(k=0;k<3;k++)
    {
    int n=str.Find('k');
    tmp=str.Mid(n-2,1);
    str1+=tmp;
    }
    MessageBox(str1);能看看,我这个程序错在哪儿吗,我觉得没错啊,可是结果不对
      

  6.   

    CString str=_T("是|1;我|0;人|2");
    CString tmp;
    CString str1=_T("");
    int k;
    for(k=0;k<3;k++)
    {
    int n=str.Find('k');
    tmp=str.Mid(n-2,1);
    str1+=tmp;
    }
    MessageBox(str1);能给我看看错在哪儿吗
      

  7.   

    int n=str.Find('k');
      

  8.   


    CString str=_T("是|1;我|0;人|2");
    CString strbuf[3] = {""};
        CString tmp;
        CString str1=_T("");
        int k;
        for(k=0;k<3;k++)
        {
            int n=str.Find(';');
            str1 = str.mid(n+1);
            tmp=str.left(n);
            n = temp.find('|');
            strbuf[atoi(temp.mid(n+1))] = temp.left(n);
            str = str1;
        }
        MessageBox(strbuf[0]+strbuf[1]+strbuf[2]);
      

  9.   

    给楼主推荐个函数:strtok() 以“;”和“|”为标志将其分割存储,比如 是 后边解析的单词是 0  定义结构体 struct DATA{char str[10]; int index};OK 然后将解析的值存储,作为链表存储,建议是有STL种的list比较方便,然后再根据index排序输出即可
    呵呵  貌似比较啰嗦 见谅
      

  10.   

    CString str=_T("是|1;我|0;人|2");
    CString tmp;
    CString str1=_T("");
    int k;
    CString str2=L"";
    for(k=0;k<3;k++)
    {
    str2.Format(L"%d",k);
    int n=str.Find(str2);
    tmp=str.Mid(n-2,1);
    str1+=tmp;
    }
    MessageBox(str1);
    已验证通过
      

  11.   


    int n=str.Find('k');
    这种语句都能写出来,lz你还是补补基础知识吧,先弄清楚int,char都是怎么回事。
      

  12.   

    看了这么多大侠的回答,很是有些感慨。大家都在讨论这个被分割的字符串如何快速有效地解析,可是就是没有人提出切实可行的排序方法。不知道各位的数据结构学习得如何?会不会使用链表?
    我提出一个思路,给楼主参考一下:
    (1)创建结构体:
    typedef struct _ti
    {
    TCHAR t;//字符
    int i;//索引
    }ti;
    (2)创建链表:
    CList<ti,ti> lst;
    (3)逐个解析原来的字符串,将每个组的字符和索引ti st(如:我|0, 存储为:st.t='我',st.i=0), 然后将st存入lst:lst.AddTail(st)
    (4)创建字符串:
    CString strData;
    (5)遍历链表, 每次将链表中索引值最小的元素st提取出来,执行:
    strData+=st.t;
    再将st从链表中删除,然后从链表头部开始再次搜索最小索引元素st,将st.t追加到strData尾部...如此不停地循环,直到lst为空:CString strData;//要输出的排序后的字符串
    ti st;
    for(int i=0;i++;)
    {
    if(lst.IsEmpty()) break;
    POSITION pos=lst.GetHeadPosition();
    while(pos)
    {
    st=lst.GetAt(pos);
    if(st.i==i)
    {
    strData+=st.t;
    lst.RemoveAt(pos);
    break;
    }
    lst.GetNext(pos);
    }
    }