现在有一个字符串(或字符数组), str1[30]={"5.3$6.4$3.1$1.23$2.53$"};其中存有五个独立的子字符串"5.3" "6.4" "3.1" "1.23" "2.53"};分别用$连接,如何将这五个字符串从str1中提取出来,成为独立的字符串,

解决方案 »

  1.   


    int k = 0;//记录当前的字串的起始位置
    for(int i = 0; i < 30; i++)
    {
      if(str1[i] == '$')
      {
          //拷贝字串
          for(int j = k; j < i; j++)
         {
          //
         }     k = i + 1;//新字串从'$'的下一个开始
      }
    }
      

  2.   

    CString str = "5.3$6.4$3.1$1.23$2.53$";
    CString strTest;
    int nPos = 0;
    strTest = str.Tokenize("$",nPos);
    AfxMessageBox(strTest);
    while(!strTest.IsEmpty())
    {
    strTest = str.Tokenize("$",nPos);
    AfxMessageBox(strTest);
    }
      

  3.   

    非常感谢,各位的回帖速度真是有点超过我的想象了。对于上面的回答小弟有几个问题不解,请各位不吝赐教。问题一、tfq2002(天涯闲游) 的方法,关键的地方就是省略的地方,不知道如何从str1[30]={"5.3$6.4$3.1$1.23$2.53$"};中将字符串拷贝。问题二、shishulv(小记者)的方法,就是Tokenize,一编译就报错,说'Tokenize' : is not a member of 'CString',不知道为什么。
      

  4.   

    str1[30]={"5.3$6.4$3.1$1.23$2.53$"};
    LPTSTR lpstr1 = str1;
    LPTSTR lp1 = NULL;
    LPTSTR lp2 = NULL;
    LPTSTR lp3 = NULL;
    LPTSTR lp4 = NULL;
    LPTSTR lp5 = NULL;
    TCHAR cstr1[5]={0};TCHAR cstr2[5]={0};TCHAR cstr3[5]={0};TCHAR cstr4[5]={0};
    TCHAR cstr5[5]={0};
    lp1 = cstr1;lp2 = cstr2;lp3 = cstr3;lp4 = cstr4;lp5 = cstr5;
    int nLen = strlen(lpstr1);
    int i = 1;
    while(*lpstr1 && nLen -- >0)
    {
        swithc(i)
    {
      case 0:
         while(*lpstr1 != '$' && nLen -- >0)
    {
    *lp1 ++ = *lpstr1;
    }
    i++;
    break;
              case 1:
         while(*lpstr1 != '$' && nLen -- >0)
    {
    *lp2 ++ = *lpstr1;
    }
    i++;
    break;
              case 2:
         while(*lpstr1 != '$' && nLen -- >0)
    {
    *lp3 ++ = *lpstr3;
    }
    i++;
    break;
              case 3:
         while(*lpstr1 != '$' && nLen -- >0)
    {
    *lp4 ++ = *lpstr4;
    }
    i++;
    break;
              case 4:
         while(*lpstr1 != '$' && nLen -- >0)
    {
    *lp5 ++ = *lpstr5;
    }
    i++;
    break;
    }
    *lpstr1++;
    }
    //==没有测试。你可以把SWITHC里面的循环写在函数。
      

  5.   

    char* st[5];
    int i = 0, j=0;
    while(i<30)
    {
      while(i<30 && str1[i] != '$')
      {
        strcat(st[j],str1[i]);
        i++;
      }
      i++;
      j++
    }
      

  6.   

    上面的方法没有测试过,
    下面这个方法是正确的:
    CString st[5];
    int i=0, j=0;
    while(i<30 && j<5)
    {
      while(i<30 && str1[i] != '$')
      {
        st[j] += str1[i];
        i++;
      }
      i++;
      j++;
    }
      

  7.   

    #include <string.h>
    #include <stdio.h>char string[] = "A string\tof ,,tokens\nand some  more tokens";
    char seps[]   = " ,\t\n";
    char *token;int main( void )
    {
       printf( "Tokens:\n" );
       /* Establish string and get the first token: */
       token = strtok( string, seps );
       while( token != NULL )
       {
          /* While there are tokens in "string" */
          printf( " %s\n", token );
          /* Get next token: */
          token = strtok( NULL, seps );
       }
    }
      

  8.   

    MFC有现成的API可以用:
    AfxExtractSubString
    不过这个API在MSDN中没有记录。我是在跟踪MFC源代码时发现的。可以把以某字符分开的字符串提取出来
    比如一个字符串char *szBuf为:
    abc?defg?hig
    ?为分隔符, AfxExtractSubString可以把abc, defg, hig分开。
    比如要得到defg这个串
    可以这样调用
    CString strRet;
    AfxExtractSubString(strRet, szBuf, 0, '?');
    第一个参数是返回的结果,第二个是原字符串,第三个参数是第几个子字符串,最后一个参数是分隔符。
      

  9.   

    用AfxExtractSubStringint i=0;
    CString szTemp;
    while(AfxExtractSubString(szTemp, str1, i, '$'))
    {
       i++;
       AfxMessageBox(szTemp);
    }