⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 funstr~1.c

📁 一百个病毒的源代码 包括熊猫烧香等 极其具有研究价值
💻 C
字号:
// Copyright 1999 Jose M. Vidal// Jose M. Vidal, vidal@multiagent.com, http://jmvidal.ece.sc.edu//// This program is free software.  You can redistribute it and/or modify// it under the terms of the GNU General Public License//// -*- mode:C++; tab-width:4; c-basic-offset:2; indent-tabs-mode:nil -*- //// $Id: funstring.C,v 1.3 2000/02/06 19:49:45 jmvidal Exp $#ifdef HAVE_CONFIG_H#include <config.h>#endif#include "funstring.H"string::size_type funstring::getEndParen(const string & s, string::size_type start){  int openCount = 0;  for (string::size_type i = start; i < s.size(); ++i){    if (s[i] == '[')      openCount++;    if (s[i] == ']')      if (openCount == 0)	return i;      else openCount--;  }  cerr << "Mismatched [] parentheses" << endl;  return string::npos;}string::size_type funstring::getNextArgument(const string & s, string::size_type pos, string & res){  int openCount = 0;  for (string::size_type i = pos; i < s.size(); ++i){    if (s[i] == '[')      openCount++;    if ((s[i] == '|') && (openCount == 0)){      res = s.substr(pos, i-pos);      return i+1;    }    if (s[i] == ']')      if (openCount == 0) {	res = s.substr(pos, i-pos);	return i+1;      }      else	openCount--;  }  cerr << "Mismatched [] parentheses, or missing/extra |." << endl;  return string::npos;}string funstring::getEvaledArgument(string::size_type start, string::size_type & end){  if ((end = getEndParen(fs, start)) == string::npos) {    cerr << "Mismatch Parenthesis." << endl;    return "";  }  funstring argument(fs.substr(start, end-start));  return argument.eval();}    string funstring::fill(const string & s){  string st;  string::size_type p = getNextArgument(s,0,st);  funstring firstArg(st);  st = firstArg.eval();  string col;  p = getNextArgument(s,p ,col);  unsigned int numcols = atoi(col.c_str());    string res = "    " + st; //indent  bool set = false;  unsigned int last = 0;  p=0;  for (unsigned int i=0; i < res.size(); i++, p++){    if ((p >= numcols) && set) {      res[last] = '\n';      p = 0;      set = false;    };    if (res[i] == ' '){      last = i;      set = true;    };  }  return res;}string funstring::nohtml(const string & s){  string st;  getNextArgument(s,0,st);  funstring arg(st);  st = arg.eval();  string::size_type start = 0;  string::size_type end = 0;  while ( (start = st.find("<")) != string::npos){    end = st.find(">", start);    st.replace(start, end-start + 1, "");   };  return st;}string funstring::noLineBreaks(const string & s){  string st;  getNextArgument(s,0,st);  funstring arg(st);  st = arg.eval();  replaceAll(st, "\n", " ");  replaceAll(st, "\t", " ");  replaceAll(st, "\r", " ");  return st;}string funstring::noAccents(const string & s){  string st;  getNextArgument(s,0,st);  funstring arg(st);  st = arg.eval();  //  cout << "noaccents:" << st << ":" << endl;  string res = "";  for (string::const_iterator i = st.begin(); i != st.end(); ++ i){    char c = *i;    unsigned short ascval = (unsigned short)c & (unsigned short)255;    if ((ascval >= 32 ) && (ascval <= 255)){      //      cout << ascval << "-" << c << " =" << EQUIVCHAR[ascval-32] << "=" << endl;      res += EQUIVCHAR[ascval-32];    }    else{      res += c;      //      cout << "not in range=" << ascval << "-" << c << endl;    }  }  return res;}/** Do a &CUT[&NOACCENTS[&NOHTML[s]]|450] */string funstring::rss(const string & s){  string st;  getNextArgument(s,0,st);  funstring arg(st);  st = arg.eval();  st = nohtml(st);  st = noAccents(st);  st = cut(st + "|450");  return st;}string funstring::firstSentence(const string & s){  string st;  getNextArgument(s,0,st);  funstring arg(st);  st = arg.eval();  string::size_type end;  string res = st;  if ((end = st.find(". ")) != string::npos){    res = st.substr(0,end+1);  }  else if ((end = st.find("? ")) != string::npos){    res = st.substr(0,end+1);  }  else if ((end = st.find("! ")) != string::npos){    res = st.substr(0,end+1);  }  else if ((end = st.find(".\t")) != string::npos){    res = st.substr(0,end+1);  }  else if ((end = st.find(".\n")) != string::npos){    res = st.substr(0,end+1);  }  else if ((end = st.find(".\r")) != string::npos){    res = st.substr(0,end+1);  }  else if ((end = st.find("?\t")) != string::npos){    res = st.substr(0,end+1);  }  else if ((end = st.find("?\n")) != string::npos){    res = st.substr(0,end+1);  }  else if ((end = st.find("?\r")) != string::npos){    res = st.substr(0,end+1);  }  else if ((end = st.find("!\t")) != string::npos){    res = st.substr(0,end+1);  }  else if ((end = st.find("!\n")) != string::npos){    res = st.substr(0,end+1);  }  else if ((end = st.find("!\r")) != string::npos){    res = st.substr(0,end+1);  };  return res;}int funstring::replaceAll(string & s, string s1, string s2){  int c = 0;  string::size_type f1 = 0;  while ((f1 = s.find(s1,f1)) != string::npos) {    c++;    s.replace(f1,s1.size(), s2);    f1 += s2.size();  }  return c;}string funstring::replace(const string & s){  string st;  string::size_type p = getNextArgument(s,0,st);  funstring arg(st);  st = arg.eval();  string from, to;  p = getNextArgument(s,p,from);  p = getNextArgument(s,p,to);  replaceAll(st,from, to);  return st;}string funstring::cut(const string & s){  string st;  string::size_type p = getNextArgument(s,0,st);  funstring arg(st);  st = arg.eval();  string length;  p = getNextArgument(s,p ,length);  unsigned int len = atoi(length.c_str());    return st.substr(0,len);}    string funstring::eval() {  string::size_type end;  string::size_type start;  string temp;  //  cout << "eval==" << fs << "==" << endl;  for (string::size_type i = 0; i < fs.size(); ++i){    if (fs[i] == '&')      if (fs.substr(i+1, 5) == "FILL[") {	start = i;	end = getEndParen(fs, i+6);	temp = fill(fs.substr(i+6, end - (i+6) + 1));	fs.replace(start, end-start+1, temp);      }      else if (fs.substr(i+1, 7) == "NOHTML[") {	start = i;	end = getEndParen(fs, i+8);	temp = nohtml(fs.substr(i+8, end - (i+8) + 1));	fs.replace(start, end-start+1, temp);      }      else if (fs.substr(i+1, 8) == "REPLACE[") {	start = i;	end = getEndParen(fs, i+9);	temp = replace(fs.substr(i+9, end - (i+9) + 1));	fs.replace(start, end-start+1, temp);      }      else if (fs.substr(i+1, 4) == "CUT[") {	start = i;	end = getEndParen(fs, i+5);	temp = cut(fs.substr(i+5, end - (i+5) + 1));	fs.replace(start, end-start+1, temp);      }      else if (fs.substr(i+1, 13) == "NOLINEBREAKS[") {	start = i;	end = getEndParen(fs, i+14);	temp = noLineBreaks(fs.substr(i+14, end - (i+14) + 1));	fs.replace(start, end-start+1, temp);      }      else if (fs.substr(i+1, 10) == "NOACCENTS[") {	start = i;	end = getEndParen(fs, i+11);	temp = noAccents(fs.substr(i+11, end - (i+11) + 1));	fs.replace(start, end-start+1, temp);      }      else if (fs.substr(i+1, 3) == "FS[") {	start = i;	end = getEndParen(fs, i+4);	temp = firstSentence(fs.substr(i+4, end - (i+4) + 1));	fs.replace(start, end-start+1, temp);      }     else if (fs.substr(i+1, 4) == "RSS[") {	start = i;	end = getEndParen(fs, i+5);	temp = rss(fs.substr(i+5, end - (i+5) + 1));	fs.replace(start, end-start+1, temp);      }   }  return fs;}		

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -