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

📄 string.cc

📁 ac3的解码程序
💻 CC
📖 第 1 页 / 共 2 页
字号:
  }  ncopy0(&(s[si]), &(x[xi]), remaining);  nrep->len = xi + remaining;  if (nrep->len <= rep->sz)   // fit back in if possible  {    rep->len = nrep->len;    ncopy0(nrep->s, rep->s, rep->len);    delete(nrep);  }  else  {    delete(rep);    rep = nrep;  }  return nmatches;}/* * deletion */void String::del(int pos, int len){  if (pos < 0 || len <= 0 || (unsigned)(pos + len) > length()) return;  int nlen = length() - len;  int first = pos + len;  ncopy0(&(rep->s[first]), &(rep->s[pos]), length() - first);  rep->len = nlen;}void String::del(const Regex& r, int startpos){  int mlen;  int first = r.search(chars(), length(), mlen, startpos);  del(first, mlen);}void String::del(const char* t, int startpos){  int tlen = slen(t);  int p = search(startpos, length(), t, tlen);  del(p, tlen);}void String::del(const String& y, int startpos){  del(search(startpos, length(), y.chars(), y.length()), y.length());}void String::del(const SubString& y, int startpos){  del(search(startpos, length(), y.chars(), y.length()), y.length());}void String::del(char c, int startpos){  del(search(startpos, length(), c), 1);}/* * substring extraction */SubString String::at(int first, int len){  return _substr(first, len);}SubString String::operator() (int first, int len){  return _substr(first, len);}SubString String::before(int pos){  return _substr(0, pos);}SubString String::through(int pos){  return _substr(0, pos+1);}SubString String::after(int pos){  return _substr(pos + 1, length() - (pos + 1));}SubString String::from(int pos){  return _substr(pos, length() - pos);}SubString String::at(const String& y, int startpos){  int first = search(startpos, length(), y.chars(), y.length());  return _substr(first,  y.length());}SubString String::at(const SubString& y, int startpos){  int first = search(startpos, length(), y.chars(), y.length());  return _substr(first, y.length());}SubString String::at(const Regex& r, int startpos){  int mlen;  int first = r.search(chars(), length(), mlen, startpos);  return _substr(first, mlen);}SubString String::at(const char* t, int startpos){  int tlen = slen(t);  int first = search(startpos, length(), t, tlen);  return _substr(first, tlen);}SubString String::at(char c, int startpos){  int first = search(startpos, length(), c);  return _substr(first, 1);}SubString String::before(const String& y, int startpos){  int last = search(startpos, length(), y.chars(), y.length());  return _substr(0, last);}SubString String::before(const SubString& y, int startpos){  int last = search(startpos, length(), y.chars(), y.length());  return _substr(0, last);}SubString String::before(const Regex& r, int startpos){  int mlen;  int first = r.search(chars(), length(), mlen, startpos);  return _substr(0, first);}SubString String::before(char c, int startpos){  int last = search(startpos, length(), c);  return _substr(0, last);}SubString String::before(const char* t, int startpos){  int tlen = slen(t);  int last = search(startpos, length(), t, tlen);  return _substr(0, last);}SubString String::through(const String& y, int startpos){  int last = search(startpos, length(), y.chars(), y.length());  if (last >= 0) last += y.length();  return _substr(0, last);}SubString String::through(const SubString& y, int startpos){  int last = search(startpos, length(), y.chars(), y.length());  if (last >= 0) last += y.length();  return _substr(0, last);}SubString String::through(const Regex& r, int startpos){  int mlen;  int first = r.search(chars(), length(), mlen, startpos);  if (first >= 0) first += mlen;  return _substr(0, first);}SubString String::through(char c, int startpos){  int last = search(startpos, length(), c);  if (last >= 0) last += 1;  return _substr(0, last);}SubString String::through(const char* t, int startpos){  int tlen = slen(t);  int last = search(startpos, length(), t, tlen);  if (last >= 0) last += tlen;  return _substr(0, last);}SubString String::after(const String& y, int startpos){  int first = search(startpos, length(), y.chars(), y.length());  if (first >= 0) first += y.length();  return _substr(first, length() - first);}SubString String::after(const SubString& y, int startpos){  int first = search(startpos, length(), y.chars(), y.length());  if (first >= 0) first += y.length();  return _substr(first, length() - first);}SubString String::after(char c, int startpos){  int first = search(startpos, length(), c);  if (first >= 0) first += 1;  return _substr(first, length() - first);}SubString String::after(const Regex& r, int startpos){  int mlen;  int first = r.search(chars(), length(), mlen, startpos);  if (first >= 0) first += mlen;  return _substr(first, length() - first);}SubString String::after(const char* t, int startpos){  int tlen = slen(t);  int first = search(startpos, length(), t, tlen);  if (first >= 0) first += tlen;  return _substr(first, length() - first);}SubString String::from(const String& y, int startpos){  int first = search(startpos, length(), y.chars(), y.length());  return _substr(first, length() - first);}SubString String::from(const SubString& y, int startpos){  int first = search(startpos, length(), y.chars(), y.length());  return _substr(first, length() - first);}SubString String::from(const Regex& r, int startpos){  int mlen;  int first = r.search(chars(), length(), mlen, startpos);  return _substr(first, length() - first);}SubString String::from(char c, int startpos){  int first = search(startpos, length(), c);  return _substr(first, length() - first);}SubString String::from(const char* t, int startpos){  int tlen = slen(t);  int first = search(startpos, length(), t, tlen);  return _substr(first, length() - first);}/* * split/join */int split(const String& src, String results[], int n, const String& sep){  String x = src;  const char* s = x.chars();  int sl = x.length();  int i = 0;  int pos = 0;  while (i < n && pos < sl)  {    int p = x.search(pos, sl, sep.chars(), sep.length());    if (p < 0)      p = sl;    results[i].rep = Salloc(results[i].rep, &(s[pos]), p - pos, p - pos);    i++;    pos = p + sep.length();  }  return i;}int split(const String& src, String results[], int n, const Regex& r){  String x = src;  const char* s = x.chars();  int sl = x.length();  int i = 0;  int pos = 0;  int p, matchlen;  while (i < n && pos < sl)  {    p = r.search(s, sl, matchlen, pos);    if (p < 0)      p = sl;    results[i].rep = Salloc(results[i].rep, &(s[pos]), p - pos, p - pos);    i++;    pos = p + matchlen;  }  return i;}#if defined(__GNUG__) && !defined(_G_NO_NRV)#define RETURN(r) return#define RETURNS(r) return r;#define RETURN_OBJECT(TYPE, NAME) /* nothing */#else /* _G_NO_NRV */#define RETURN(r) return r#define RETURNS(r) /* nothing */#define RETURN_OBJECT(TYPE, NAME) TYPE NAME;#endifString join(String src[], int n, const String& separator) RETURNS(x){  RETURN_OBJECT(String,x)  int i;  String sep = separator;  int xlen = 0;  for (int i = 0; i < n; ++i)    xlen += src[i].length();  xlen += (n - 1) * sep.length();  x.rep = Sresize (x.rep, xlen);  int j = 0;    for (i = 0; i < n - 1; ++i)  {    ncopy(src[i].chars(), &(x.rep->s[j]), src[i].length());    j += src[i].length();    ncopy(sep.chars(), &(x.rep->s[j]), sep.length());    j += sep.length();  }  ncopy0(src[i].chars(), &(x.rep->s[j]), src[i].length());  RETURN(x);}  /* misc*/    StrRep* Sreverse(const StrRep* src, StrRep* dest){  int n = src->len;  if (src != dest)    dest = Salloc(dest, src->s, n, n);  if (n > 0)  {    char* a = dest->s;    char* b = &(a[n - 1]);    while (a < b)    {      char t = *a;      *a++ = *b;      *b-- = t;    }  }  return dest;}StrRep* Supcase(const StrRep* src, StrRep* dest){  int n = src->len;  if (src != dest) dest = Salloc(dest, src->s, n, n);  char* p = dest->s;  char* e = &(p[n]);  for (; p < e; ++p) if (islower(*p)) *p = toupper(*p);  return dest;}StrRep* Sdowncase(const StrRep* src, StrRep* dest){  int n = src->len;  if (src != dest) dest = Salloc(dest, src->s, n, n);  char* p = dest->s;  char* e = &(p[n]);  for (; p < e; ++p) if (isupper(*p)) *p = tolower(*p);  return dest;}StrRep* Scapitalize(const StrRep* src, StrRep* dest){  int n = src->len;  if (src != dest) dest = Salloc(dest, src->s, n, n);  char* p = dest->s;  char* e = &(p[n]);  for (; p < e; ++p)  {    int at_word;    if ((at_word = islower(*p)))      *p = toupper(*p);    else       at_word = isupper(*p) || isdigit(*p);    if (at_word)    {      while (++p < e)      {        if (isupper(*p))          *p = tolower(*p);	/* A '\'' does not break a word, so that "Nathan's" stays	   "Nathan's" rather than turning into "Nathan'S". */        else if (!islower(*p) && !isdigit(*p) && (*p != '\''))          break;      }    }  }  return dest;}#if defined(__GNUG__) && !defined(_G_NO_NRV)String replicate(char c, int n) return w;{  w.rep = Sresize(w.rep, n);  char* p = w.rep->s;  while (n-- > 0) *p++ = c;  *p = 0;}String replicate(const String& y, int n) return w{  int len = y.length();  w.rep = Sresize(w.rep, n * len);  char* p = w.rep->s;  while (n-- > 0)  {    ncopy(y.chars(), p, len);    p += len;  }  *p = 0;}String common_prefix(const String& x, const String& y, int startpos) return r;{  int l;  const char* xchars = x.chars();  const char* ychars = y.chars();  const char* xs = &(xchars[startpos]);  const char* ss = xs;  const char* topx = &(xchars[x.length()]);  const char* ys = &(ychars[startpos]);  const char* topy = &(ychars[y.length()]);  for (l = 0; xs < topx && ys < topy && *xs++ == *ys++; ++l);  r.rep = Salloc(r.rep, ss, l, l);}String common_suffix(const String& x, const String& y, int startpos) return r;{  int l;  const char* xchars = x.chars();  const char* ychars = y.chars();  const char* xs = &(xchars[x.length() + startpos]);  const char* botx = xchars;  const char* ys = &(ychars[y.length() + startpos]);  const char* boty = ychars;  for (l = 0; xs >= botx && ys >= boty && *xs == *ys ; --xs, --ys, ++l);  r.rep = Salloc(r.rep, ++xs, l, l);}#elseString replicate(char c, int n){  String w;  w.rep = Sresize(w.rep, n);  char* p = w.rep->s;  while (n-- > 0) *p++ = c;  *p = 0;  return w;}String replicate(const String& y, int n){  String w;  int len = y.length();  w.rep = Sresize(w.rep, n * len);  char* p = w.rep->s;  while (n-- > 0)  {    ncopy(y.chars(), p, len);    p += len;  }  *p = 0;  return w;}String common_prefix(const String& x, const String& y, int startpos){  String r;  const char* xchars = x.chars();  const char* ychars = y.chars();  const char* xs = &(xchars[startpos]);  const char* ss = xs;  const char* topx = &(xchars[x.length()]);  const char* ys = &(ychars[startpos]);  const char* topy = &(ychars[y.length()]);  for (int l = 0; xs < topx && ys < topy && *xs++ == *ys++; ++l);  r.rep = Salloc(r.rep, ss, l, l);  return r;}String common_suffix(const String& x, const String& y, int startpos) {  String r;  const char* xchars = x.chars();  const char* ychars = y.chars();  const char* xs = &(xchars[x.length() + startpos]);  const char* botx = xchars;  const char* ys = &(ychars[y.length() + startpos]);  const char* boty = ychars;  for (int l = 0; xs >= botx && ys >= boty && *xs == *ys ; --xs, --ys, ++l);  r.rep = Salloc(r.rep, ++xs, l, l);  return r;}#endif// IOistream& operator>>(istream& s, String& x){  if (!s.ipfx(0) || (!(s.flags() & ios::skipws) && !ws(s)))  {    s.clear(ios::failbit|s.rdstate()); // Redundant if using GNU iostreams.    return s;  }  int ch;  int i = 0;  x.rep = Sresize(x.rep, 20);  register streambuf *sb = s.rdbuf();  while ((ch = sb->sbumpc()) != EOF)  {    if (isspace(ch))      break;    if (i >= x.rep->sz - 1)      x.rep = Sresize(x.rep, i+1);    x.rep->s[i++] = ch;  }  x.rep->s[i] = 0;  x.rep->len = i;  int new_state = s.rdstate();  if (i == 0) new_state |= ios::failbit;  if (ch == EOF) new_state |= ios::eofbit;  s.clear(new_state);  return s;}int readline(istream& s, String& x, char terminator, int discard){  if (!s.ipfx(0))    return 0;  int ch;  int i = 0;  x.rep = Sresize(x.rep, 80);  register streambuf *sb = s.rdbuf();  while ((ch = sb->sbumpc()) != EOF)  {    if (ch != terminator || !discard)    {      if (i >= x.rep->sz - 1)        x.rep = Sresize(x.rep, i+1);      x.rep->s[i++] = ch;    }    if (ch == terminator)      break;  }  x.rep->s[i] = 0;  x.rep->len = i;  if (ch == EOF) s.clear(ios::eofbit|s.rdstate());  return i;}ostream& operator<<(ostream& s, const SubString& x){   const char* a = x.chars();  const char* lasta = &(a[x.length()]);  while (a < lasta)    s.put(*a++);  return(s);}// from John.Willis@FAS.RI.CMU.EDUint String::freq(const SubString& y) const{  int found = 0;  for (unsigned int i = 0; i < length(); i++)     if (match(i,length(),0,y.chars(), y.length())>= 0) found++;  return(found);}int String::freq(const String& y) const{  int found = 0;  for (unsigned int i = 0; i < length(); i++)     if (match(i,length(),0,y.chars(),y.length()) >= 0) found++;  return(found);}int String::freq(const char* t) const{  int found = 0;  for (unsigned int i = 0; i < length(); i++)     if (match(i,length(),0,t) >= 0) found++;  return(found);}int String::freq(char c) const{  int found = 0;  for (unsigned int i = 0; i < length(); i++)     if (match(i,length(),0,&c,1) >= 0) found++;  return(found);}int String::OK() const{  if (rep == 0             // don't have a rep    || rep->len > rep->sz     // string oustide bounds    || rep->s[rep->len] != 0)   // not null-terminated      error("invariant failure");  return 1;}int SubString::OK() const{  int v = S != (const char*)0; // have a String;  v &= S.OK();                 // that is legal  v &= pos + len >= S.rep->len;// pos and len within bounds  if (!v) S.error("SubString invariant failure");  return v;}

⌨️ 快捷键说明

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