2_10_2B.C
上传用户:wyn840322
上传日期:2007-01-13
资源大小:294k
文件大小:3k
源码类别:

数据结构

开发平台:

C/C++

  1. /* ======================================== */
  2. /*    程式实例: 2_10_2b.c                   */
  3. /*    字符串和数学运算式的分割                */
  4. /* ======================================== */
  5. /* ---------------------------------------- */
  6. /*  分割字符串或数学运算式                    */
  7. /* ---------------------------------------- */
  8. int token(char *str1,char *str2,int pos)
  9. {
  10.    int i,j;
  11.    i = pos;                       /* 从分割位置开始   */
  12.    while ( str1[i] == ' ' )       /* 跳过空字元       */
  13.       i++;
  14.    if ( str1[i] != '' )         /* 不是字符串结束     */
  15.    {
  16.       j = 0;                      /* 找下一个空白字元 */
  17.       while ( str1[i] != '' && str1[i] != ' ' )
  18.       {
  19.          str2[j] = str1[i];       /* 拷贝非空白字元   */
  20.          if ( operator(str1[i]) ) /* 是不是运算子     */
  21.             /* 是否分割字符串是运算子 */
  22.             if ( j > 0 )
  23.             {                     /* 不是             */
  24.                str2[j] = '';    /* 传回之前的字符串   */
  25.                return i;
  26.             }
  27.             else
  28.             {                     /* 是               */
  29.                str2[j+1] = '';  /* 传回运算子       */
  30.                return i+1;
  31.             }
  32.          i++;
  33.          j++;
  34.       }
  35.       str2[j] = '';             /* 分割字符串结束字元 */
  36.       return i;                   /* 传回目前位置     */
  37.    }
  38.    else
  39.       return -1;                  /* 分割结束         */
  40. }
  41. /* ---------------------------------------- */
  42. /*  分割运算子字符串设定                      */
  43. /* ---------------------------------------- */
  44. int operator(char op)
  45. {
  46.    switch ( op )
  47.    {
  48.       case '+':
  49.       case '-':
  50.       case '*':
  51.       case '/':
  52.       case '=':
  53.       case '.': return 1;         /* 是运算子         */
  54.       default:  return 0;         /* 不是运算子       */
  55.    }                              
  56. }
  57. /* ---------------------------------------- */
  58. /*  主程式                                  */
  59. /* ---------------------------------------- */
  60. void main()
  61. {
  62.    char string[100];              /* 字符串阵列宣告     */
  63.    char token_string[20];         /* 分割字符串宣告     */
  64.    int pos;                       /* 分割位置         */
  65.    printf("请输入字符串 ==> ");
  66.    gets(string);                  /* 读取字符串         */
  67.    pos = 0;                       /* 设定分割位置初值 */
  68.    printf("分割结果:n");
  69.    /* 分割字符串直到字符串结束 */
  70.    while ( (pos = token(string,token_string,pos)) != -1 )
  71.       printf("%sn",token_string);  /* 印出各分割字符串 */
  72. }