一个文本框内,输入11,12,13-19,20,这10个数,意思也就是11,12,13一直到20,一共是10个数,-的意思就是从多少到多少页,单击一个OK按钮,之后自动算出有多少个数,不是总和,不知道明白没明白意思,就是一个计算器的东西,只算加法的,或者说1,2-100,这就是100个数,算个数的,单击OK如何算出这是100个数。只求具体点的步骤高手帮忙做下程序,并简单说明下,鄙人菜鸟,希望有好心人士帮忙下,逗号与“-”都类似隔点,如果:我输入了1和2-3,(这是3个),单击OK了,给出个MessageBox(“3”),希望有高手能帮忙。

解决方案 »

  1.   

    先用GetDlgItemText获取字符串,然后分析一下这个字符串,可以用先用strtok利用,号将字符串先分割出来,再逐一分析分割后的字符串,单独处理13-19这样的字符串.
      

  2.   

    void CXXXX::OnOK()
    {
         CString MyStr;
         int     count=0;   //定义计数器
         GetDlgItem(IDC_EDIT1)->GetWindowText(&MyStr);//取的ID为IDC_EDIT1的文本
         int len=MyStr.GetLength();//取得该文本的长度,即字符个数
     
         for(int i=0;i<len;i++)
         {
            ch=MyStr.GetAt(i);
            if((ch==',')||(ch=='-'))
               count++;                //如果发现有','或者'-',计数加1
          }     CString temp;
         temp.Format("%d",count);     //将计量的数据转换成信息输出
         MessageBox(temp);
    }
      

  3.   

    void CXXXX::OnOK()
    {
      CString MyStr;
      int count=0; //定义计数器
      GetDlgItem(IDC_EDIT1)->GetWindowText(&MyStr);//取的ID为IDC_EDIT1的文本
      int len=MyStr.GetLength();//取得该文本的长度,即字符个数
     
      for(int i=0;i<len;i++)
      {
      ch=MyStr.GetAt(i);
      if((ch==',')||(ch=='-'))
      count++; //如果发现有','或者'-',计数加1
      }  CString temp;
      temp.Format("%d",count); //将计量的数据转换成信息输出
      MessageBox(temp);
    }
      

  4.   


    CString str;
      GetDlgItem(IDC_EDIT1)->GetWindowText(&str);
    int iLength = str.GetLength();
    char c;
    int iCurrent = 0;
    int iTotal = 0; //总数
    bool bIsNum = 0;
    while(iCurrent < iLength)
    {
    c = str.GetAt(iCurrent ++);
    switch(c)
    {
    case '0':
    case '1':
    case '2':
    case '3':
    case '4':
    case '5':
    case '6':
    case '7':
    case '8':
    case '9':
    if(!bIsNum)
    {
    iTotal ++;
    bIsNum = 1;
    }
    break;
    default:
    if(bIsNum)
    {
    bIsNum = 0;
    }
    break;
    }
    }
      

  5.   

    GetDlgItem(IDC_EDIT1)->GetWindowText(&str);
    编译通不过,两位的都是这样。
      

  6.   

    IDC_EDIT1要换成你自己那个编辑框的ID号
    你连这问题都搞不明白,那你给1000分都帮不了你
      

  7.   

    你需要把IDC_EDIT1换成你自己edit的ID
      

  8.   

    高手对话框的ID是IDC_EDIT1。谢谢。
     error C2664: 'void __thiscall CWnd::GetWindowTextA(class CString &) const' : cannot convert parameter 1 from 'class CString *' to 'class CString &'
      

  9.   


    #define MAX_BUFFER 512
    TCHAR szText[MAX_BUFFER] = {0};
    GetDlgItemText(IDC_EDIT1, szText, MAX_BUFFER-1);
    TCHAR* seps = _T(" ,");
    TCHAR* subs = _T("-");
    TCHAR* token = 0;
    int nCount = 0;
    token = _tcstok(szText, seps);
    while(NULL != token)
    {
    TCHAR* szTmp = _tcschr(token, _T('-'));
    if(NULL != szTmp)
    {
    *szTmp = _T('\0');
    int start = _ttoi(token);
    int end = _ttoi(++szTmp);
    nCount += end - start + 1;
    }
    else
    {
    ++nCount;
    }
    token = _tcstok(NULL, seps);
    }
    _stprintf(szText, _T("%d"), nCount);
    AfxMessageBox(szText);
      

  10.   

    VisualEleven
     万分感谢您。