有一个ini文件,
我用CString 类型的变量获取了它的一个字符串的值,在处理这个值时我感觉到麻烦很大,在这里求助,希望能得到大家的帮助CString s="22:03:12,23:33:33,34,39"s是我从ini文件中读出来的,其中22:03:12是起始时间(时分秒),22:03:12现在我想把这两个时间输入到一个控件中,就像IP控件那样,中间的冒号不能动,只有时分秒可以变动;后边的整数34,和39输入到其它的控件中,
刚开始我还以为这问题简单,后来越想越觉得的麻烦,首先这个字符串如何分割开分别读就是问题
其次,我分离了字符串,还要把它们转到控间中又是很麻烦的转换我实在想的头大了,哪位大侠解决过类似的问题,给一个例程看看吧,感激不尽!

解决方案 »

  1.   

    字符串分离倒是比较简单阿,用CString::Find,CString::ReverseFind,strstr等等都可以搞定。
    至于时间类型的控件没有做过
      

  2.   

    CString s="22:03:12,23:33:33,34,39";
    CString first, second, th, fo;
    first = s.left(8);
    second = s.mid(9, 8);
    th = s.mid(18, 2);
    fo = s.mid(21, 2);
    靠, 都是定长的还不好分解, 有没有搞错.到控件里, 弄个编辑框, 定时刷新里面的值就是了.
    int hour, mintinue, second;
    hour = atoi(first.left(2));
    mintinue = ..
    second = ..
    CString tm1;
    while(...)
    {
    tm1.Format("%d:%d:%d", hour, mintinue, second);
    SetDlgItemText(IDC_EDIT1, tm1);
    second ++;
    if(second == 60)
    mininue++, second=0;
    }
      

  3.   

    //////////////////////////////////////////////////
    // 功能: 拆分字符串
    // 参数:
    //  IN lpszInput 需要分析的字符串
    //  IN nLen 字符串长度
    //  IN lpszSplit 分隔符
    //  INOUT ppszList 输出字符串数组
    //  INOUT nCount 字符串数组大小, 实际输出个数
    //  INOUT nMaxLen 字符串长度, 实际最大长度
    // 返回:
    //  TRUE 操作成功, FALSE 操作失败
    //////////////////////////////////////////////////
    BOOL Split( LPCTSTR lpszInput, UINT nLen, LPCTSTR lpszSplit, 
       char **ppszList, UINT &nCount, UINT &nMaxLen )
    {
    if ( lpszInput && nLen>0 && lpszSplit )
    {
    UINT nPos = 0,
    nOffset = 0,
    nSplitLen = (UINT)strlen( lpszSplit ),
    nItemCount = 0;
    while ( nOffset<nLen )
    {
    // 比较分隔符
    char *pszOffset = strstr( lpszInput + nOffset, lpszSplit );
    if ( pszOffset )
    {
    nPos = nOffset;
    nOffset = pszOffset - lpszInput; if ( ppszList && nItemCount<nCount && nOffset - nPos<nMaxLen && nOffset > nPos )
    {
    if ( ppszList[nItemCount] )
    {
    memset( ppszList[nItemCount], 0, nMaxLen );
    memcpy( ppszList[nItemCount], lpszInput + nPos, nOffset - nPos );
    }

    }
    else
    {
    nMaxLen = max( nMaxLen, nOffset - nPos + 1 );
    }

    nOffset += nSplitLen;
    nItemCount ++;
    }
    else
    {
    break;
    }
    } return ( nCount=nItemCount )>0; }
    return FALSE;
    }
    使用: 第一次传空ppszList获得个数和最长行数, 然后初始化ppszList, 再次调用得到数据.