Advertisement
Guest User

Untitled

a guest
Feb 22nd, 2020
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.44 KB | None | 0 0
  1. static char* put_replacement(char* out, const char* r, int len)
  2. {
  3.     memcpy(out, r, len);
  4.     return out + len;
  5. }
  6.  
  7. static void replace(const char* in, char* out, int outlen)
  8. {
  9.     const char* r = "NUM";
  10.     const char* q;
  11.     int flag = 0;
  12.     char p;
  13.  
  14.     while ((p = *in++)) {
  15.         if (flag == 0) {
  16.             if (isdigit(p)) {
  17.                 q = in - 1;
  18.                 flag = 1;
  19.                 continue;
  20.             }
  21.             if (isalpha(p))
  22.                 flag = 2;
  23.         }
  24.  
  25.         if (flag == 1) {
  26.             if (isdigit(p))
  27.                 continue;
  28.             if (isalpha(p)) {
  29.                 out = put_replacement(out, q, in - 1 - q);
  30.                 flag = 2;
  31.             }
  32.             else {
  33.                 out = put_replacement(out, r, strlen(r));
  34.                 flag = 0;
  35.             }
  36.         }
  37.  
  38.         if (flag == 2 && !(isalpha(p) || isdigit(p))) {
  39.             flag = 0;
  40.         }
  41.  
  42.         *out++ = p;
  43.     }
  44.  
  45.     if (flag == 1)
  46.         out = put_replacement(out, r, strlen(r));
  47.  
  48.     *out++ = '\0';
  49. }
  50.  
  51. const char* input = "for (int i = 0; i < 9; i++)";
  52.  
  53. int main(int argc, char* argv[])
  54. {
  55.     const char* in = input;
  56.     size_t outlen;
  57.     char* out;
  58.  
  59.     outlen = strlen(in) * 3 / 2 + 1;
  60.     out = malloc(outlen);
  61.     if (!out)
  62.         return ENOMEM;
  63.  
  64.     replace(in, out, outlen);
  65.  
  66.     printf("in: %s\n", in);
  67.     printf("out: %s\n", out);
  68.  
  69.     free(out);
  70.     return 0;
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement