谢谢各位:)
我还有一个问题,是这样的:
问题如下:CString a="(-a)+(-b)+(-c)";
CString b="(a)+(b)+(d)";我想把这两个字符串中只要遇到括号内的变量是互反的(假设在一个字符串内不会出现变量互反)
就将它们消去
然后连并成一个新的字符串
这样就得到一个新的字符串 CString c让它的值是 "(-c)+(d)"
请问有什么函数或方法来实现吗?谢谢啦!

解决方案 »

  1.   

    一个词法分析器的延伸,从表达式中提取标识符的同时,把它前面的符号也一起提出来.形成一个List.两个表达式,+或-时.再从List中提取标识符后,匹配标识符的符号位.同时形成新的字符串
      

  2.   

    to:bigant888(比熊牛,比牛熊) 
    谢谢
    恩......没太看明白你写的思路
    编译里的词法分析我略知一些
      

  3.   

    拙作...
    CString a="(-a)+(-b)+(-c)";
    CString b="(a)+(b)+(d)";
    CList<CString,CString> m_List;
    int m,n=0;
    while((m=a.Find('(',n)+1)&&(n=a.Find(')',m)+1))
    {
    m_List.AddTail(a.Mid(m,n-m-1));
    }
    n=0;
    while((m=b.Find('(',n)+1)&&(n=b.Find(')',m)+1))
    {
    CString d=b.GetAt(m)=='-'?"":"-";
    POSITION pos = m_List.Find(d+b.Mid(m,n-m-1));
    if(NULL == pos)
    m_List.AddTail(b.Mid(m,n-m-1));
    else
    m_List.RemoveAt(pos);
    }
    POSITION pos=m_List.GetHeadPosition();
    CString c="";
    while(pos!=NULL)
    c+=(c==""?"(":"+(")+m_List.GetNext(pos)+")";
    MessageBox(c);
      

  4.   

    to: vcmute(横秋) 我将上面的这段程序修改后试了试
    报出几个错
      

  5.   

    to: vcmute(横秋) 谢谢!谢谢!我自己犯了个错误,措意导致程序出错......
    真的太谢谢你了!我还有个问题:我用MFC做了一个简单的界面,是基于对话筐的,我在界面上添加了一个Edit Box和一个按纽,并且 在 ClassWizard--->Member Variables 中把Edit Box定义为CString类型,变量名起的是m_a,双击按钮后在函数里我又定义了一个CString的变量tempCString temp;
    temp=m_a;
    MessageBox(temp);编译没有错,运行后我在Edit Box中输入了内容,但是弹出的对话筐却没有任何显示
    说明temp的值是空的,请问该如何修改程序。谢谢谢谢
      

  6.   

    我靠,你那个关于EditBox的问题太简单了,我这个刚入门的正好可以解答^_^^_^
    在temp=m_a;后添加 UpdateData(true);来将控件的值传到m_a。用UpdateData(false);将程序运行中改变后的m_a的值传到控件中去显示。