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

📄 string.c

📁 语音Email/语音Modem程序包
💻 C
字号:
/* -*- C++ -*- * String.C - source file for class String * Copyright (c) 1999 Joe Yandle <joe@wlcg.com> *  * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. *  * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. *  * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. *  */#include "String.h"#include <assert.h>const int DEF = 255;String::String(){    sz = 0;    data = new char[DEF];    data[sz] = 0;}String::String(const String& s){    sz = s.sz;    data = new char[s.sz+1];    strcpy(data, s.data);    data[sz]=0;}String::String(int size){    sz = 0;    data = new char[size+1];    data[sz] = 0;}String::String(char* s){    sz = strlen(s);    data = new char[sz+1];    strcpy(data, s);    data[sz] = 0; }String::String(const char* s){    sz = strlen(s);    data = new char[sz+1];    strcpy(data, s);    data[sz] = 0; }String::String(const string& s){    sz = strlen(s.c_str());    data = new char[sz+1];    strcpy(data, s.c_str());    data[sz] = 0; }String::String(const _gtk_string& s){        sz = strlen(s.c_str());    data = new char[sz+1];    strcpy(data, s.c_str());    data[sz] = 0; }String::~String(){    delete [] data;}String String::valueOf(int i){    char temp[255];    sprintf(temp, "%d", i);    return String(temp);}String String::valueOf(double i){    char temp[255];    sprintf(temp, "%f", i);    return String(temp);}void String::chop(){    data[--sz]=0;}void String::chopWhite(){    while(data[sz-1] == '\n' || data[sz-1] == 10 || data[sz-1] == 13) {	chop();    }}void String::setSize(){    sz = strlen(data);}char* String::cstr() const{    return data;}string String::str() const{    return string(data);}_gtk_string String::gstr() const{    return _gtk_string(data);}int String::length() const{    return sz;}bool String::contains(String s) const{    return strstr(data, s.data);}/*  String String::operator()(int i)*/String String::operator()(int i) const{    assert(i>=0 && i<sz);        char temp[2];    temp[0]=data[i];    temp[1]=0;    return String(temp);}/*  String String::operator()(int i, int j)    returns substring from i (inclusive)   to j (non-inclusive)*/String String::operator()(int i, int j) const{    assert(i>=0 && i<=j && j<=sz);    String ret(j-i);    for(int q=0; q<(j-i); q++) {	ret.data[q] = data[i+q];    }    ret.data[(j-i)]=0;    ret.sz = (j-i);    return ret;}/*  StringVector String::tokenize() const*/StringVector String::tokenize() const{    String delim = " ";    return tokenize(delim);}/*  StringVector String::tokenize(const String& delim) const*/StringVector String::tokenize(const String& delim) const{    StringVector ret;    String token;    char* tmp1 = new char[sz+1];    char* tmp2;    strcpy(tmp1, data);    tmp2 = strtok(tmp1, delim.cstr());    while(tmp2) {	token = String(tmp2);	ret.push_back(token);	tmp2 = strtok(NULL, delim.cstr());    }    delete [] tmp1;    return ret;}String String::operator=(const String& s){    delete [] data;    data = new char[s.sz+1];    strcpy(data, s.data);    sz = s.sz;    return (*this);}String String::operator=(const char* s){    delete [] data;    data = new char[strlen(s)+1];    strcpy(data, s);    sz = strlen(s);    return (*this);}String String::operator+=(const String& s){    return ((*this) = (*this)+s);}String operator+(const String& s1, const String& s2){    String ret(s1.sz + s2.sz + 1);    strcpy(ret.data, s1.data);    strcpy(ret.data+s1.sz, s2.data);    ret.sz = s1.sz+s2.sz;    ret.data[ret.sz]=0;    return ret;}String operator+(const String& s1, const char* s2){    String temp(s2);    return (s1+temp);}String operator+(const String& s1, const int i){    return (s1 + String::valueOf(i));}String operator+(const String& s1, const double i){    return (s1 + String::valueOf(i));}String operator+(const char* s1, const String& s2){    String temp(s1);    return (temp+s2);}bool operator==(const String& s1, const String& s2){    if(s1.sz != s2.sz) {	return false;    }    else {	for(int i=0; i<s1.sz; i++) {	    if(s1.data[i] != s2.data[i]) {		return false;	    }	}	return true;    }}bool operator!=(const String& s1, const String& s2){    return !(s1 == s2);}bool operator<(const String& s1, const String& s2){    int size = 0;    if(s1.sz < s2.sz) {	size = s1.sz;    }    else {	size = s2.sz;    }    for(int i=0; i<size; i++) {	if( s1.data[i] < s2.data[i] ) {	    return true;	}	else if( s1.data[i] > s2.data[i] ) {	    return false;	}    }    if(s1.sz < s2.sz) {	return true;    }    else {	return false;    }}bool operator>=(const String& s1, const String& s2){    return !(s1 < s2);}bool operator>(const String& s1, const String& s2){    return !(s1 <= s2);}bool operator<=(const String& s1, const String& s2){    return ((s1 < s2) || (s1 == s2));}

⌨️ 快捷键说明

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