用户会在一个editbox里输入字符串,内容如lkkd-cd56778-dfdgg-3466,现在需要把它拆开,以 - 为拆开标记,把第一个横杠之前的东西放到str1,第一个横杠后第二个横杠前的放到str2,如此类推,横杠前后内容的长度是不确定的

解决方案 »

  1.   

    把整个字符串存在一个变量里,然后用字符串操作函数reversefind即可达到你的目的
      

  2.   

    利用CString来保存编辑框的字符串
    然后定义两个pos1和pos2,初始都为0,然后用pos2去定位第一个“-”出现的位置,将pos1和pos2之间的字符拷到str1中,然后pos1=pos2,pos2继续后找,以此类推。
      

  3.   

    循环调用CString的Find和Mid函数即可实现。
      

  4.   

    用【C语言】自己写函数分析。
    1、获取字符串长度;2、for 循环;3、判断"-"。
      

  5.   

    最简单的方法
    先将"-"换成" - "
    然后比如这样
    char buf[]="lkkd - cd56778 - dfdgg - 3466";
    char str1[20];
    char str2[20];
    char str3[20];
    char str4[20];
    sscanf(buf,"%s - %s - %s - %s",str1,str2,str3,str4);
      

  6.   

    strtok,使用"-"作为令牌循环调用strtok,将顺序获得子串。
    sscanf不行,因为如果想扫描字符串的话,必须在格式化串里面指定字符串长度,比如sscanf(buf, "%08s-%02s", str1,str2);
      

  7.   

    shakaqrj ——我试过了,这位的方法可行,sscanf加空格可以
      

  8.   

    #include <stdio.h>
    #include <string.h>
    int k=0;
    void main(){
    char string[100]; //= "lkkd - cd56778 - dfdgg - 3466";
    char seps[]= "- ";
    char *token;
    char *result[4];
            token = strtok( string, seps );
    while( token != NULL )
    {  

    /* While there are tokens in "string" */
    result[k]=token;
    k++; /* Get next token: */
    token = strtok( NULL, seps );
    }
    for(int j=0;j<4;j++)
    {
    printf("%s,",result[j]);
    }}前不久我刚做的,我的程序的功能比你的复杂多了,这个是我把我的程序修改过的,应该可以完成你的要求,你自己再调一下,可能有点小问题,但绝对可以用的。要是不能通过可以给我留言。
      

  9.   

    //拆分字符串,按照seprator里指定的字符拆分TCHAR** ExtractStr(LPCTSTR source, LPCTSTR seprator, int *count)
    {
    int           i;
    TCHAR *token;
    TCHAR **pstr;
    TCHAR    **ptr;
    TCHAR    *buffer;
    TCHAR    *StrPos,*preStrPos;
    int           iStrLen,iArrCount,iArrSize,isize,spSize,tmpSize;
    iStrLen = (int)_tcslen(source)+1;
    spSize = (int)_tcslen(seprator);
    buffer = new TCHAR [iStrLen];
    TCHAR loacalseperator=seprator[0]; _tcscpy_s(buffer,iStrLen,source); // 查找有多少个 *seprator 并且 统计最大长度和个数;
    StrPos = buffer;
    preStrPos = buffer;
    iArrCount =1; // 默认个数为1,长度为 字符串长度
    iArrSize = iStrLen;
    isize=0; // 开始最小长度 if(spSize!=1)
    {
    for(i=0;i<iStrLen-1;i++)
    {
    if(_tcschr(seprator+1,buffer[i]))
    {
    buffer[i]=seprator[0];
    }
    }
    } while( (StrPos = _tcschr( StrPos,loacalseperator))!=NULL)
    {
    iArrCount++;
    tmpSize = (int)(StrPos-preStrPos);
    isize = max(isize, tmpSize);
    StrPos+=1;
    preStrPos = StrPos;
    }
    // 最后一个
    tmpSize = (int)_tcslen(preStrPos);
    isize = max(isize,tmpSize); isize ++ ; //添加一个结束符号
    iArrSize = min(iArrSize , isize); *count=0;
    pstr=(TCHAR **)malloc(iArrCount*sizeof(TCHAR *));
    ptr=pstr; for(i=0;i<iArrCount;i++)
    pstr[i]=(TCHAR*)malloc(iArrSize*sizeof(TCHAR)); TCHAR *temptoken=NULL;
    token = _tcstok_s(buffer, seprator,&temptoken); if(token!=NULL)
    {
    _tcscpy_s(*ptr,iArrSize,token);
    (*count)++;
    *ptr++; while(token!=NULL)
    {
    token = _tcstok_s(NULL, seprator,&temptoken); if(token!=NULL)
    {
    _tcscpy_s(*ptr,iArrSize,token);
    (*count)++;
    *ptr++;
    }
    }
    }
    delete []buffer;
    if(*count==0)
    {
    FreeStrings(pstr,iArrCount);
    return NULL;
    }
    else
    return pstr;
    }//释放内存
    void FreeStrings(TCHAR **lpstr, int count)
    {
    if(lpstr==NULL)
    {
    return;
    } for(int i=0;i<count;i++)
    {
    if(lpstr[i]!=NULL)
    free(lpstr[i]);
    } free(lpstr);
    }
    //用法
    TCHAR **strings;
    int stringcount;
    strings=ExtractStr(tempbuffer,TEXT(","),&stringcount);//strings就是拆分出来的字符串数组,stringcount是拆分出来多少个子串
    FreeStrings(strings,stringcount);//释放内存
      

  10.   

    strtok挺好,但是要注意多线程问题