Advertisement
NaZaRa

mIRC's common operators in C/C++

Jan 17th, 2013
204
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 14.16 KB | None | 0 0
  1. #include <iostream.h>
  2. #include <string.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <locale.h>
  6. #include <sstream.h>
  7. #include <fstream.h>
  8. /*
  9.  * mIRC's common operators in C/C++
  10.  
  11. [Initial release - April 1, 2009]
  12. $len - len(string text)
  13. $addtok - string addtok(string text, string token, string delim)
  14. $deltok - string deltok(string text, string token, string delim)
  15. $findtok - int findtok(string tokens, string token, int tok, string delim)
  16. $gettok - string gettok(string tokens, int tok, string delim)
  17. $instok - string instok(string text, string token, int tok, string delim)
  18. $istok - int istok(string text, string token, string delim)
  19. $matchtok - string matchtok(string text, string token, int tok, string delim)
  20. $numtok - int numtok(string tokens, string delim)
  21. $puttok - string puttok(string text, string token, int tok, string delim)
  22. $remtok - string remtok(string text, string token, int tok, string delim)
  23. $reptok - string reptok(string text, string token, string stoken, int tok, string delim)
  24. $wildtok - string wildtok(string tokens, string token, int tok, string delim)
  25. isin - int isin(string text, string subtext, int pos = -1)
  26. iswm - int iswm(string text, string subtext)
  27.  
  28. [Second release (v1.1) - April 2, 2009]
  29. istok() is now a bool, instead of an int
  30. $upper - string upper(string text)
  31. $lower - string lower(string text)
  32. iswm() is now a bool, instead of an int
  33. isalpha - bool stringisalpha(string text)
  34. isalnum - bool stringisalnum(string text)
  35. islower - bool stringislower(string text)
  36. isupper - bool stringisupper(string text)
  37. isnum - bool stringisnum(string text) | bool stringisnum(string text, int lo) | bool stringisnum(string text, int lo, int hi)
  38. isletter - bool isletter(string text) | bool isletter(string text, string subtext)
  39.  
  40. [Third release (v1.2) - April 11, 2009]
  41. addtok() now doesn't add an extra delimiter char to the beginning if string text is empty.
  42. string appendtok(string text, string token, string delim) - Works just like addtok(), except even though the token already exists, it will be added.
  43. $replace - string strreplace(string text, string find, string replace)
  44. $rand - int randint(int lo, int hi) Keep in mine this does not work with chars.
  45. string randtok(string text, string delim) - Returns a random token.
  46. string randomizetok(string text, string delim) - Returns the tokens in a random order.
  47. $left - string strleft(string text, int n) Allows negative n.
  48. $right - string strright(string text, int n) Allows negative n.
  49. $mid - string strmid(string text, int start, int len)
  50. $str - string strrep(string text, int rep)
  51.  
  52. [Fourth release (v1.3) - April 15, 2009]
  53. Fixed bug in strright().
  54. $readini - string readini(string loc, string section, string item, int n = 1) - Only new thing here is n, it is optional, but if specified it will allow you to get the nth item in section. (Incase you have two items the same name, you can get the one you want)
  55. */
  56. using namespace std;
  57.  
  58. int randint(int lo, int hi)
  59. {
  60.     static bool seeded = false;
  61.     if (!seeded) srand(time(NULL)), seeded = true;
  62.     int i = lo + rand() % hi;
  63.     return i;
  64. }
  65.  
  66. int len(string text)
  67. {
  68.     return text.size();
  69. }
  70.  
  71. int numtok(string tokens, string delim)
  72. {
  73.     if (tokens.size() == 0) return 0;
  74.     int y = 1;
  75.     for (int x = 0; x < tokens.size(); x++) if (tokens.compare(x,1,delim) == 0) y++;
  76.     return y;
  77. }
  78.  
  79. string gettok(string tokens, int tok, string delim)
  80. {
  81.      int x = 1, y = 0;
  82.      string ret;
  83.      if (tok < 0) tok = numtok(tokens,delim)+tok+1;
  84.      for (int a = 0; a < tokens.size(); a++)
  85.      {
  86.          if (tokens.compare(a,1,delim) == 0) x++;
  87.          if (x == tok) y = x;
  88.          if (y > 0)
  89.          {
  90.                   if (x > y) break;
  91.                   ret.append(tokens,a,1);
  92.          }
  93.      }
  94.      if (ret.compare(0,1,delim) == 0) return ret.erase(0,1);
  95.      else return ret;
  96. }
  97.  
  98. int isin(string text, string subtext, int pos = -1)
  99. {
  100.     int a = 0, x, b = 0;
  101.     for (x = 0; x < text.size(); x++)
  102.     {
  103.              if (text.compare(x,1,subtext,0,1) == 0)
  104.              {
  105.                 a = 1;
  106.                 for (int y = 1; y < subtext.size(); y++)
  107.                 {
  108.                     if (a == 0) break;
  109.                     if (text.compare(x+y,1,subtext,y,1) != 0) a = 0;
  110.                 }
  111.                 if (a == 1) b++;
  112.                 if (a == 1 && b >= pos)
  113.                 {
  114.                       if (pos == 0) continue;
  115.                       else break;
  116.                 }
  117.              }
  118.     }
  119.     if (pos == 0) return b;
  120.     if (b == pos)
  121.     {
  122.             if (a == 1) return x;
  123.             else return -1;
  124.     }
  125.     else if (pos > 0) return -1;
  126.     else return a;
  127. }
  128.  
  129. bool iswm(string text, string subtext)
  130. {
  131.     int a = -1, b = numtok(subtext,"*"), r, l = 0;
  132.     string str;
  133.     for (int y = 1; y <= b; y++)
  134.     {
  135.         if (l > 0) { str = gettok(gettok(subtext,y-1,"*"),l,"?"); l--; }
  136.         str = gettok(subtext,y,"*");
  137.         if (str.compare(0,1,"?") == 0)
  138.         {
  139.            str.erase(0,1);
  140.            a++;
  141.         }
  142.         else if (isin(str,"?",1) > 0)
  143.         {
  144.              if (str.compare(str.size()-2,1,"?") == 0) a++;
  145.              else l++;
  146.              str = gettok(str,1,"?");
  147.         }
  148.         else l = 0;
  149.         r = 0;
  150.         if (y == 1 && subtext.compare(0,1,"*") != 0 && a == -1)
  151.         {
  152.               for (int s = 0; s < str.size()*-1; s--)
  153.               {
  154.                   if (text.compare(s,1,str,s,1) != 0)
  155.                   {
  156.                      r = 1;
  157.                      break;
  158.                   }
  159.               }
  160.               if (r == 1) break;
  161.         }
  162.         if (str.size() == 0) continue;
  163.         r = 0;
  164.         for (int g = 1; g <= isin(text,str,0); g++)
  165.         {
  166.             if (a < isin(text,str,g))
  167.             {
  168.                a = isin(text,str,g)+str.size();
  169.                r = 2;
  170.                break;
  171.             }
  172.             if (g == isin(text,str,0)) r = 1;
  173.         }
  174.         if (r != 2)
  175.         {
  176.               r = 1;
  177.               break;
  178.         }
  179.     }
  180.     if (r == 1) return false;
  181.     else return true;
  182. }
  183.  
  184. int findtok(string tokens, string token, int tok, string delim)
  185. {
  186.     int x, a = 0;
  187.     for (x = 1; x <= numtok(tokens,delim); x++)
  188.     {
  189.         if (token.compare(gettok(tokens,x,delim)) == 0) a++;
  190.         if ((a == tok) && (tok > 0)) break;
  191.     }
  192.     if (tok == 0) return a;
  193.     if (a == tok) return x;
  194.     else return 0;
  195. }
  196.  
  197. string wildtok(string tokens, string token, int tok, string delim)
  198. {
  199.     int a = 0;
  200.     string str, ret;
  201.     for (int x = 1; x <= numtok(tokens,delim); x++)
  202.     {
  203.         str = gettok(tokens,x,delim);
  204.         if (iswm(str,token)) a++;
  205.         if (a == tok) break;
  206.     }
  207.     if (a == tok) return str;
  208.     else return ret;
  209. }
  210.  
  211. bool istok(string text, string token, string delim)
  212. {
  213.     if (findtok(text,token,1,delim) > 0) return true;
  214.     else return false;
  215. }
  216.  
  217. string addtok(string text, string token, string delim)
  218. {
  219.     if (!istok(text,token,delim))
  220.     {
  221.         if (text.size() >= 1) text = text + delim + token;
  222.         else text = token;
  223.     }
  224.     return text;
  225. }
  226.  
  227. string deltok(string text, int tok, string delim)
  228. {
  229.     string ret;
  230.     int a = numtok(text,delim);
  231.     if ((tok > a) || (tok < a*-1) || (tok == 0)) return text;
  232.     if (tok < 0) tok = a+tok+1;
  233.     for (int x = 1; x <= a; x++) if (x != tok) ret = ret + delim + gettok(text,x,delim);
  234.     if (ret.compare(0,1,delim) == 0) return ret.erase(0,1);
  235.     else return ret;
  236. }
  237.  
  238. string instok(string text, string token, int tok, string delim)
  239. {
  240.     string ret;
  241.     int a = numtok(text,delim);
  242.     if ((tok > a) || (tok < a*-1) || (tok == 0)) return text;
  243.     if (tok < 0) tok = a+tok+1;
  244.     for (int x = 1; x <= a; x++)
  245.     {
  246.         if (x == tok) ret = ret + delim + token + delim + gettok(text,x,delim);
  247.         else ret = ret + delim + gettok(text,x,delim);
  248.     }
  249.     if (ret.compare(0,1,delim) == 0) return ret.erase(0,1);
  250.     else return ret;
  251. }
  252.  
  253. string matchtok(string text, string token, int tok, string delim)
  254. {
  255.     int a = numtok(text,delim), y = 0, x;
  256.     if ((tok > a) || (tok == 0)) return "";
  257.     for (x = 1; x <= a; x++)
  258.     {
  259.         if (isin(gettok(text,x,delim),token) == 1) y++;
  260.         if (y == tok) break;
  261.     }
  262.     if (y == tok) return gettok(text,x,delim);
  263.     else return "";
  264. }
  265.  
  266. string puttok(string text, string token, int tok, string delim)
  267. {
  268.     string ret;
  269.     int a = numtok(text,delim);
  270.     if ((tok > a) || (tok == 0) || (tok < a*-1)) return text;
  271.     if (tok < 0) tok = a+tok+1;
  272.     for (int x = 1; x <= a; x++)
  273.     {
  274.         if (x == tok) ret = ret + delim + token;
  275.         else ret = ret + delim + gettok(text,x,delim);
  276.     }
  277.     if (ret.compare(0,1,delim) == 0) return ret.erase(0,1);
  278.     else return ret;
  279. }
  280.  
  281. string remtok(string text, string token, int tok, string delim)
  282. {
  283.     int a = findtok(text,token,0,delim);
  284.     if ((tok > a) || (tok < a*-1) || (a == 0)) return text;
  285.     if (tok < 0) tok = a+tok+1;
  286.     if ((tok > 0) || (a == 1)) return deltok(text,findtok(text,token,tok > 0 ? tok : 1,delim),delim);
  287.     for (int x = 1; x <= a; x++) text = deltok(text,findtok(text,token,1,delim),delim);
  288.     return text;
  289. }
  290.  
  291. string reptok(string text, string token, string stoken, int tok, string delim)
  292. {
  293.     int a = findtok(text,token,0,delim);
  294.     if ((tok > a) || (tok < a*-1) || (a == 0)) return text;
  295.     if (tok < 0) tok = a+tok+1;
  296.     if ((tok > 0) || (a == 1)) return puttok(text,stoken,findtok(text,token,tok > 0 ? tok : 1,delim),delim);
  297.     for (int x = 1; x <= a; x++) text = puttok(text,stoken,findtok(text,token,1,delim),delim);
  298.     return text;
  299. }
  300.  
  301. bool stringisalpha(string text)
  302. {
  303.     for (int x = 0; x < text.size(); x++)
  304.     {
  305.         if (!isalpha(text[x])) return false;
  306.     }
  307.     return true;
  308. }
  309.  
  310. bool stringisalnum(string text)
  311. {
  312.     for (int x = 0; x < text.size(); x++)
  313.     {
  314.         if (!isalnum(text[x])) return false;
  315.     }
  316.     return true;
  317. }
  318.  
  319. bool stringislower(string text)
  320. {
  321.     for (int x = 0; x < text.size(); x++)
  322.     {
  323.         if (!islower(text[x]) && isalpha(text[x])) return false;
  324.     }
  325.     return true;
  326. }
  327.  
  328. bool stringisupper(string text)
  329. {
  330.     for (int x = 0; x < text.size(); x++)
  331.     {
  332.         if (!isupper(text[x]) && isalpha(text[x])) return false;
  333.     }
  334.     return true;
  335. }
  336.  
  337. bool stringisnum(string text)
  338. {
  339.      if (text.compare(0,1,"-") == 0) text.erase(0,1);
  340.      for (int x = 0; x < text.size(); x++)
  341.      {
  342.          if (!isdigit(text[x])) return false;
  343.      }
  344.      return true;
  345. }
  346.  
  347. bool stringisnum(string text, int lo)
  348. {
  349.      int num, neg;
  350.      if (text.compare(0,1,"-") == 0) { text.erase(0,1); neg = 1; }
  351.      if (!stringisnum(text)) return false;
  352.      stringstream(text) >> num;
  353.      if (neg == 1) num = num*-1;
  354.      if (lo == num) return true;
  355.      return false;
  356. }
  357.  
  358. bool stringisnum(string text, int lo, int hi)
  359. {
  360.      int num, neg;
  361.      if (text.compare(0,1,"-") == 0) { text.erase(0,1); neg = 1; }
  362.      if (!stringisnum(text)) return false;
  363.      stringstream(text) >> num;
  364.      if (neg == 1) num = num*-1;
  365.      if (lo <= num && num <= hi) return true;
  366.      return false;
  367. }
  368.  
  369. bool isletter(string text)
  370. {
  371.      if ((text.size() == 1) && (isalpha(text[0]))) return true;
  372.      return false;
  373. }
  374.  
  375. bool isletter(string text, string subtext)
  376. {
  377.      if ((isletter(text)) && (isin(subtext,text))) return true;
  378.      return false;
  379. }
  380.  
  381. string upper(string text)
  382. {
  383.     string ret, t;
  384.     for (int x = 0; x < text.size(); x++)
  385.     {
  386.         if (islower(text[x])) { t = toupper(text[x]); ret.append(t); }
  387.         else { t = text[x]; ret.append(t); }
  388.     }
  389.     return ret;
  390. }
  391.  
  392. string lower(string text)
  393. {
  394.     string ret, t;
  395.     for (int x = 0; x < text.size(); x++)
  396.     {
  397.         if (isupper(text[x])) { t = tolower(text[x]); ret.append(t); }
  398.         else { t = text[x]; ret.append(t); }
  399.     }
  400.     return ret;
  401. }
  402.  
  403. string strreplace(string text, string find, string replace)
  404. {
  405.     int flen = find.size(), rlen = replace.size();
  406.     if (!isin(text,find)) return text;
  407.     for (int x = 0; x < text.size(); x++)
  408.     {
  409.         if (text.compare(x,flen,find) == 0)
  410.         {
  411.             text.erase(x,flen);
  412.             text.insert(x,replace);
  413.             x+=rlen-1;
  414.         }
  415.     }
  416.     return text;
  417. }
  418.  
  419. string appendtok(string text, string token, string delim)
  420. {
  421.     if (text.size() >= 1) text = text + delim + token;
  422.     else text = token;
  423.     return text;
  424. }
  425.  
  426. string randtok(string text, string delim)
  427. {
  428.     if (numtok(text,delim) <= 1) return text;
  429.     return gettok(text,randint(1,numtok(text,delim)),delim);
  430. }
  431.  
  432. string randomizetok(string text, string delim)
  433. {
  434.     if (numtok(text,delim) <= 1) return text;
  435.     string ret;
  436.     int x;
  437.     while (numtok(text,delim) > 0)
  438.     {
  439.         x = randint(1,numtok(text,delim));
  440.         ret = appendtok(ret,gettok(text,x,delim),delim);
  441.         text = deltok(text,x,delim);
  442.     }
  443.     return ret;
  444. }
  445.  
  446. string strleft(string text, int n)
  447. {
  448.     string ret;
  449.     if (n < 0) ret.append(text,text.size()-n,n*-1);
  450.     else ret.append(text,0,n);
  451.     return ret;
  452. }
  453.  
  454. string strright(string text, int n)
  455. {
  456.     string ret;
  457.     if (n < 0) ret.append(text,0,n*-1);
  458.     else ret.append(text,text.size()-n,n);
  459.     return ret;
  460. }
  461.  
  462. string strmid(string text, int start, int len)
  463. {
  464.     string ret;
  465.     if (start > text.size()) return ret;
  466.     ret.append(text,start,len);
  467.     return ret;
  468. }
  469.  
  470. string strrep(string text, int rep)
  471. {
  472.     string ret;
  473.     for (int x = 1; x <= rep; x++) ret.append(text);
  474.     return ret;
  475. }
  476.  
  477. string readini(string loc, string section, string item, int n = 1)
  478. {
  479.     ifstream file (loc.c_str());
  480.     string line, ret;
  481.     int m = 1, i = 0, c = -1;
  482.     if (!file.is_open()) return "";
  483.     while (!file.eof())
  484.     {
  485.         getline(file,line);
  486.         if ((strleft(line,1) == "[") && (strright(line,1) == "]")) i++;
  487.         if (c == i)
  488.         {
  489.             if (gettok(line,1,"=") == item)
  490.             {
  491.                 if (m == n)
  492.                 {
  493.                     ret = line.erase(0,isin(line,"=",1)+1);
  494.                     break;
  495.                 }
  496.                 m++;
  497.             }
  498.         }
  499.         if ((strleft(line,1) == "[") && (strright(line,1) == "]") && (strmid(line,1,line.size()-2) == section)) c = i;
  500.     }
  501.     file.close();
  502.     return ret;
  503. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement