//--------------------------------------------------// // 文字列クラス(C++用) strbuf.cpp version 1.2 // // copyright やすっち // // HomePage // // http://game12m.hp.infoseek.co.jp/ // // E-mail // // silvercra@yahoo.co.jp // // 自己PR // // シルバー王女、ハナちゃんなどが好きな一面も // // ある、風変わりな作者さんということで^^ // // // //--------------------------------------------------// // 商用ソフトなど全てにおいてのプログラムへの // // 導入、改変利用などは連絡不要で // // 全面許可いたしますが、プログラムそのものを // // 有料配布したりすること及び作者に不利益になる // // 行為などは禁止いたします。 // // 当然ながら作者自身もこのプログラムを // // 何らかの形で使用することもあります。 // // なお作者は当プログラムにより利用者が不利益を // // 生じたりしても一切責任を取る事は致しませんので、 // // 予めご了承ください。 // //--------------------------------------------------// // このクラスの内容はJavaなどのように出来る限り // // 演算子で簡単に文字列操作を実現できるように // // 作成したクラスです。 // // (現時点ではまだ不完全です…汗) // // 当プログラムは処理系依存はしないつもりで // // 作成していますが、VisualC++でしか // // 試していませんので動作保障は出来ません。 // // もちろんWinAPI及びMFCなどは未使用です。 // //--------------------------------------------------// #include #include #include "strbuf.h" #include "e_throw.h" //--------------------------------------------------// // クラス StringBuffer // //--------------------------------------------------// // コンストラクタ(使用禁止) StringBuffer::StringBuffer(){ } // コンストラクタ StringBuffer::StringBuffer(int size){ buf = new CHAR[size+1]; buf[size-1+1] = '\0'; len = size; } // コンストラクタ StringBuffer::StringBuffer(CHAR *str){ int i; for(i=0;str[i]!='\0';i++); buf = new CHAR[i]; strcpy(buf,str); len = i; } // デストラクタ StringBuffer::~StringBuffer(){ } // 文字列結合 StringBuffer* StringBuffer::operator +(StringBuffer *strbuf){ CHAR *src1 = new CHAR[length()]; CHAR *src2 = new CHAR[strbuf->length()]; StringBuffer* reti; strcpy(src1,buf); strcpy(src2,strbuf->buf); reti = new StringBuffer(strcat(src1,src2)); return reti; } // 文字列結合 StringBuffer* StringBuffer::operator +(CHAR str[]){ CHAR *src = new CHAR[length()]; StringBuffer* reti; strcpy(src,buf); reti = new StringBuffer(strcat(src,str)); return reti; } // 文字列削減 StringBuffer* StringBuffer::operator -(int dellen){ len -= dellen; if(len<0) len = 0; buf[len-1+1] = '\0'; return this; } // 文字列ビット演算 StringBuffer* StringBuffer::operator |(CHAR str[]){ int i = 0; while( buf[i]!='\0' && str[i]!='\0' ){ buf[i] |= str[i]; i++; } return this; } // 文字列ビット演算 StringBuffer* StringBuffer::operator &(CHAR str[]){ int i = 0; while( buf[i]!='\0' && str[i]!='\0' ){ buf[i] &= str[i]; i++; } return this; } // 文字列ビット演算 StringBuffer* StringBuffer::operator ^(CHAR str[]){ int i = 0; while( buf[i]!='\0' && str[i]!='\0' ){ buf[i] ^= str[i]; i++; } return this; } // 文字列反転並べ替え void StringBuffer::reverse(){ CHAR *str = new CHAR[length()]; int i = 0; str[length()-1+1] = '\0'; while( buf[i]!='\0' ){ str[(length()-1) - i] = buf[i]; i++; } strcpy(buf,str); } // 文字列呼び出し CHAR* StringBuffer::toString(){ CHAR *reti = new CHAR[length()]; strcpy(reti,buf); return reti; } // 10進数に変換して返す int StringBuffer::toDigit(){ int reti = 0; int i = 0; while( buf[i]!='\0' ){ #if ERROR_THROWS if(isdigit(buf[i])==0) throw BadCharacterException(); #endif reti += ( buf[i] - '0' ) * ( (int)pow( 10, ((len-i)-1)) ); i++; } return reti; } // 文字列の長さ所得 int StringBuffer::length(){ return len; }