📄 stringclass.h
字号:
// -*- C++ -*-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com)This file is part of groff.groff is free software; you can redistribute it and/or modify it underthe terms of the GNU General Public License as published by the FreeSoftware Foundation; either version 2, or (at your option) any laterversion.groff is distributed in the hope that it will be useful, but WITHOUT ANYWARRANTY; without even the implied warranty of MERCHANTABILITY orFITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licensefor more details.You should have received a copy of the GNU General Public License alongwith groff; see the file COPYING. If not, write to the Free SoftwareFoundation, 675 Mass Ave, Cambridge, MA 02139, USA. */#include <string.h>#include <stdio.h>#include <assert.h>class string {public: string(); string(const string &); string(const char *); string(const char *, int); string(char); ~string(); string &operator=(const string &); string &operator=(const char *); string &operator=(char); string &operator+=(const string &); string &operator+=(const char *); string &operator+=(char); void append(const char *, int); int length() const; int empty() const; int operator*() const; string substring(int i, int n) const; char &operator[](int); char operator[](int) const; void set_length(int i); const char *contents() const; int search(char) const; char *extract() const; void clear(); void move(string &); friend inline string operator+(const string &, const string &); friend inline string operator+(const string &, const char *); friend inline string operator+(const char *, const string &); friend inline string operator+(const string &, char); friend inline string operator+(char, const string &); friend inline int operator==(const string &, const string &); friend inline int operator!=(const string &, const string &); friend int operator<=(const string &, const string &); friend int operator<(const string &, const string &); friend int operator>=(const string &, const string &); friend int operator>(const string &, const string &);private: char *ptr; int len; int sz; string(const char *, int, const char *, int); // for use by operator+ void grow1();};inline char &string::operator[](int i){ assert(i >= 0 && i < len); return ptr[i];}inline char string::operator[](int i) const{ assert(i >= 0 && i < len); return ptr[i];}inline int string::length() const{ return len;}inline int string::empty() const{ return len == 0;}inline int string::operator*() const{ return len;}inline const char *string::contents() const{ return ptr;}inline string operator+(const string &s1, const string &s2){ return string(s1.ptr, s1.len, s2.ptr, s2.len);}inline string operator+(const string &s1, const char *s2){ if (s2 == 0) return s1; else return string(s1.ptr, s1.len, s2, strlen(s2));}inline string operator+(const char *s1, const string &s2){ if (s1 == 0) return s2; else return string(s1, strlen(s1), s2.ptr, s2.len);}inline string operator+(const string &s, char c){ return string(s.ptr, s.len, &c, 1);}inline string operator+(char c, const string &s){ return string(&c, 1, s.ptr, s.len);}inline int operator==(const string &s1, const string &s2){ return (s1.len == s2.len && (s1.len == 0 || memcmp(s1.ptr, s2.ptr, s1.len) == 0));}inline int operator!=(const string &s1, const string &s2){ return (s1.len != s2.len || (s1.len != 0 && memcmp(s1.ptr, s2.ptr, s1.len) != 0));}inline string string::substring(int i, int n) const{ assert(i >= 0 && i + n <= len); return string(ptr + i, n);}inline string &string::operator+=(char c){ if (len >= sz) grow1(); ptr[len++] = c; return *this;}void put_string(const string &, FILE *);string as_string(int);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -