Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2017
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.59 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <ctype.h>
  4. #include <cstdlib>
  5.  
  6.  
  7. #ifndef __cplusplus
  8. typedef bool unsigned char;
  9. #define true 1
  10. #define false 0
  11. #endif
  12.  
  13. const char OPERATOR_OR  = '|';
  14. const char OPERATOR_AND = '&';
  15. const char OPERATOR_NOT = '!';
  16. const char OPERATOR_XOR = '^';
  17.  
  18. const char ASCII_A = 0x41;
  19. const char ASCII_Z = 0x5A;
  20.  
  21.  
  22. static unsigned char *variables;
  23. static unsigned char varsCount;
  24.  
  25.  
  26. /*
  27.  * Decide how many variables are in string
  28.  *
  29.  * @param string
  30.  */
  31. unsigned char getVarsCount(const char *string)
  32. {
  33.     unsigned char i;
  34.  
  35.     if ( string == NULL )
  36.         return 0;
  37.  
  38.     for ( i = ASCII_A; i < ASCII_Z; i++ )
  39.     {
  40.         if ( strchr(string, i) == NULL )
  41.             return ( i - ASCII_A );
  42.     }
  43.  
  44.     return 0;
  45. }
  46.  
  47. /*
  48.  * Get var's current value by char represent.
  49.  *
  50.  * @param var
  51.  */
  52. unsigned char getValue(const char var)
  53. {
  54.     return ( variables[var - ASCII_A - 1] );
  55. }
  56.  
  57.  
  58.  
  59. /*
  60.  * Parses the sequence of strings and returns
  61.  * Stack, packed in char array (zero-ended)
  62.  *
  63.  * @param string - input string
  64.  */
  65. unsigned char parseString(char *string)
  66. {
  67.     size_t length;
  68.     int    i;
  69.     int    value_total;
  70.  
  71.     if ( string == NULL )
  72.         return NULL;
  73.  
  74.     // Get stack length
  75.     length = strlen(string);
  76.     if ( length < 1 )
  77.         return 0;
  78.  
  79.     value_total = getValue(string[0]);
  80.  
  81.     // Parse the string
  82.     for ( i = 1; i < length; i++ )
  83.     {
  84.         if ( string[i] == OPERATOR_AND )
  85.             value_total &= getValue(string[i + 1]);
  86.         else if ( string[i] == OPERATOR_OR )
  87.             value_total |= getValue(string[i + 1]);
  88.         else if ( string[i] == OPERATOR_XOR )
  89.             value_total ^= value_total;
  90.         else if ( string[i] == OPERATOR_NOT )
  91.             value_total = ! value_total;
  92.     }  
  93.  
  94.     return value_total;
  95. }
  96.  
  97.  
  98. /*
  99.  * The entry point
  100.  *
  101.  * @param argc - cl arguments count
  102.  * @param argv - cl arguments 2d array
  103.  */
  104. int main(int argc, char **argv)
  105. {
  106.     FILE *fp = NULL;
  107.     char string[256];
  108.     char tmp_string[256];
  109.     unsigned char i;
  110.     size_t count;
  111.    
  112.     fp = fopen("expression.txt", "r");
  113.     if ( fp == NULL )
  114.         return 1;
  115.  
  116.     count = fread(string, 1, 255, fp);
  117.     fclose(fp);
  118.  
  119.     string[count] = 0x00;
  120.     printf("Expression: %s\n\n", string);
  121.  
  122.     fopen("output.txt", "w");
  123.  
  124.  
  125.     for ( i = 0; i < varsCount; i++ )
  126.     {
  127.        
  128.     }
  129.  
  130. /////////////////////////////////////////////////////////////////
  131. // Вот тут надо переберать переменные и вызывать parseString
  132. /////////////////////////////////////////////////////////////
  133. //  fwrite(tmp_string, 1, strlen(tmp_string), fp);
  134.  
  135.     varsCount = getVarsCount(string);
  136.     printf("%d\n", varsCount);
  137.  
  138.     fclose(fp);
  139.  
  140.     system("PAUSE");
  141.     return 0;
  142. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement