Advertisement
dllbridge

Untitled

Jan 15th, 2025
41
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.05 KB | None | 0 0
  1.  
  2.  
  3. #include  <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include  <stdio.h>
  7. #include <stdlib.h>
  8. #include <string.h>
  9.  
  10. struct TT
  11. {
  12.    
  13.     int     n;                //  offset
  14.     int  nLen;                // strlen
  15.     TT *pNext;
  16. };
  17.  
  18. class LL
  19. {
  20.     public:
  21.        
  22.     TT *pHead;
  23.     TT *pTail;
  24.     int nCounter;
  25.    
  26.     char *pszBUF,
  27.          *pszPos;                 //  Ïîçèöèÿ ïå÷àòè íîâîãî ñëîâà
  28.    
  29.          LL();
  30.     void  push(const char* psz);
  31.     void init();
  32.     void monitor();
  33. } L1;
  34.  
  35. int main()
  36. {
  37.  
  38.     L1.push(  "void"); 
  39.     L1.push(   "one");
  40.     L1.push(   "two");
  41.     L1.push( "three");
  42.     L1.push(  "SONY");    
  43.  
  44.  L1.monitor();
  45.  
  46.  
  47. return 0;
  48. }
  49.  
  50. LL::LL()
  51. {
  52.     pHead = 0;
  53.     pTail = 0;
  54.     nCounter = 0;
  55. }
  56. /////////////////////////////////////////////////
  57. void LL::push(const char* psz)
  58. {    
  59.      
  60.    
  61.     static int nSizeBuf =   0,
  62.                nStepBuf = 100;  
  63.                
  64.              
  65.      
  66.     if(nCounter == 0)
  67.     {
  68.        pszBUF = (char *)malloc (nStepBuf);  
  69.        
  70.        pszPos = pszBUF;    
  71.        
  72.        nSizeBuf = nStepBuf;                
  73.     }
  74.    
  75.    
  76.    
  77.     int nLen = strlen(psz);
  78.    
  79.    
  80.     // = = = = = = = = = =  
  81.     int nOffset = pszPos - pszBUF;  
  82.    
  83.     if(nOffset + nLen >=  nStepBuf)
  84.     {
  85.        nSizeBuf += nStepBuf;        
  86.        pszBUF = (char *)realloc(pszBUF, nSizeBuf);
  87.        
  88.        pszPos = pszBUF - nOffset;      
  89.     }
  90.    
  91.     memcpy(pszPos, psz, nLen);
  92.    
  93.  
  94.    
  95.     TT *pp = (TT*)malloc(sizeof(TT));
  96.    
  97.  //   int        nOffset = pszPos - pszBUF ;
  98.     pp->n    = nOffset;
  99.     pp->nLen = nLen;               
  100.    
  101.    
  102.     pszPos += nLen;                  //  Íà áóäóùåå
  103.    
  104.     if(nCounter == 0)
  105.     {
  106.         pHead = pp;
  107.     }
  108.     else
  109.     {
  110.         pTail->pNext = pp;
  111.     }
  112.     nCounter++;
  113.     pp->pNext = 0; 
  114.     pTail = pp;
  115. }
  116. //////////////////////////////////////////////////
  117.  
  118. void LL::monitor()
  119. {
  120.     TT *p = pHead;
  121.    
  122.     for(int i = 0; i < nCounter; i++)
  123.     {
  124.         printf("n = %3d, %.*s\n", p->n, p->nLen, L1.pszBUF+p->n);
  125.         p = p->pNext;
  126.     }
  127. }
  128.  
  129.  
  130.  
  131.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement