디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

헠헠... 나만의 C++ String 구현했닼.... ㅋㅋ

노0(218.48) 2013.03.03 01:32:57
조회 225 추천 0 댓글 13

인터넷에서 떠돌아다니는 거 열심히 취합해서

했다...

1시간 30분 걸렸네... 으헝 ㅠㅠ




#pragma once

#include <vector>
#include <windows.h>
using namespace std;

class String {
        protected:
                //data
                char* data;
                unsigned datasize,datalen;
                //friends
                friend bool operator==(const String&,const String&);
                friend bool operator==(const String&,const char*);
                friend bool operator==(const char*,const String&);
        public:
                String() {
                        data=NULL;
                        datasize=0;
                        datalen=0;
                };
                String(const char* str) {
                        unsigned s=strlen(str);
                        data=new char[s+33];
                        memcpy(data,str,s+1);
                        datasize=s+33;
                        datalen=s;
                };
                String(const String& str) {
                        data=new char[str.datasize];
                        memcpy(data,str.data,str.datasize);
                        datasize=str.datasize;
                        datalen=str.datalen;
                };
                ~String() {
                        delete[] data;
                };
                inline operator char*() {
                        return data;
                };
                inline operator const char*() const {
                        return data;
                };
                inline char* c_str() {
                        return data;
                };
                inline const char* c_str() const {
                        return data;
                };
                inline char& operator[](const int x) {
                        return data[x];
                };
                inline const char& operator[](const int x) const {
                        return data[x];
                };
                String& operator=(const char c) {
                        delete[] data;
                        data=new char[34];
                        data[0]=c;
                        data[1]=0;
                        datasize=34;
                        datalen=1;
                        return *this;
                };
                String& operator=(const char* str) {
                        delete[] data;
                        unsigned s=strlen(str);
                        data=new char[s+33];
                        memcpy(data,str,s+1);
                        datasize=s+32;
                        datalen=s;
                        return *this;
                };
                String& operator=(const String& str) {
                        delete[] data;
                        data=new char[str.datasize];
                        memcpy(data,str.data,str.datasize);
                        datasize=str.datasize;
                        datalen=str.datalen;
                        return *this;
                };
                String& operator+=(const char c) {
                        if(datalen+2<datasize) {
                                data[datalen]=c;
                                data[datalen+1]=0;
                                ++datalen;
                        }else{
                                char* tmp=new char[datasize+33];
                                memcpy(tmp,data,datasize);
                                delete[] data;
                                data=tmp;
                                data[datalen]=c;
                                data[datalen+1]=0;
                                datasize+=33;
                                ++datalen;
                        }
                        return *this;
                };
                String& operator+=(const char* str) {
                        unsigned s=strlen(str);
                        if(datalen+s<datasize) {
                                memcpy(data+datalen,str,s);
                                datalen+=s;
                        }else{
                                char* tmp=new char[datasize+s<<1];
                                memcpy(tmp,data,datasize);
                                delete[] data;
                                data=tmp;
                                memcpy(data+datalen,str,s);
                                datasize+=s<<1;
                                datalen+=s;
                        }
                        return *this;
                };
                String& operator+=(const String& str) {
                        if(datalen+str.datalen<datasize) {
                                memcpy(data+datalen,str.data,str.datalen);
                                datalen+=str.datalen;
                        }else{
                                char* tmp=new char[datasize+str.datalen<<1];
                                memcpy(tmp,data,datasize);
                                delete[] data;
                                data=tmp;
                                memcpy(data+datalen,str.data,str.datalen);
                                datasize+=str.datalen<<1;
                                datalen+=str.datalen;
                        }
                        return *this;
                };
                void clear() {
                        delete[] data;
                        data=new char[32];
                        data[0]=0;
                        datasize=32;
                        datalen=0;
                };
                int insert(const char c,const unsigned pos) {
                        if(datalen+2<datasize) {
                                memmove(data+pos+1,data+pos,datalen-pos);
                                data[pos]=c;
                                ++datalen;
                        }else{
                                char* tmp=new char[datasize+32];
        char* tmp=str2.data;
        while(*tmp!=0) {
                if(*tmp!=*str1) {
                        return false;}
                ++tmp;
                ++str1;
        }
        return true;
}
bool operator!=(const String& str1,const String& str2) {
        return !(str1==str2);
}
bool operator!=(const String& str1,const char* str2) {
        return !(str1==str2);
}
bool operator!=(const char* str1,const String& str2) {
        return !(str1==str2);
}

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 반응이 재밌어서 자꾸만 놀리고 싶은 리액션 좋은 스타는? 운영자 25/07/28 - -
AD 휴대폰 액세서리 세일 중임! 운영자 25/07/28 - -
349546 닷넷 4.0, 4.5 관련 책이나 문서 추천좀... [13] 규식이(218.153) 13.03.16 118 0
349545 물론 다들 그러진 않겠지만.,, [3] LastCorona갤로그로 이동합니다. 13.03.16 91 0
349544 일하면서 디씨하는거야??? [3] ㅁㄴㅇ(1.245) 13.03.16 89 0
349543 불금이야 이시키들아!! [7] LastCorona갤로그로 이동합니다. 13.03.16 83 0
349542 프갤이나 싸이엔지 등 사이트 연구원 분들은 보안에 신경쓰세요 [6] 에어로홍갤로그로 이동합니다. 13.03.16 145 0
349540 airwig 는 본다. [17] ㅇㅇ(119.203) 13.03.16 1841 0
349539 조만간 로봇과 테니스를 칠 날이 옵니다 [2] 에어로홍갤로그로 이동합니다. 13.03.16 60 0
349537 짝 다운 받아 보는데 이번 여자들이 연예인들이었구나!! [1] 멍청닭(182.211) 13.03.16 76 0
349536 불구님 보세요 The Jedi Mind Control Game [1] 에어로홍갤로그로 이동합니다. 13.03.16 49 0
349534 프갤에 이제 뇌파로 글쓰는넘도 유입됬네. [2] ㅇㅇ(115.41) 13.03.15 88 0
349533 nodejs에서 뷰를 html로 쓸려면 어떻게 하나용? [1] 후후(1.231) 13.03.15 66 0
349532 움직일 수 있는 곳이 눈과 입밖에 없어 돈을 못 벌고 있습니다... [4] 불구(211.189) 13.03.15 93 0
349531 시밤 델파이 창 고정 안됨?? [4] 멍청닭(182.211) 13.03.15 102 0
349530 directshow에서 Imediaseeking 의 setposition을 루프로 돌리면 먹통이 되는데 해결방법 아는 사람 있어? 흐강갤로그로 이동합니다. 13.03.15 37 0
349529 형님들 제발 피자 한 판만 쏴 주십쇼. 제가 진짜 너무 힘듭니다. [2] 사지장애거지(211.189) 13.03.15 84 0
349528 현재 기계학습 기술은 어느정도까지 발전한 상태인가요? ㅁㄴㅇㄹ(220.117) 13.03.15 83 0
349527 저기 홈페이지 제작 관련.ask [1] ㅁㄴㅇㄹ(121.190) 13.03.15 94 0
349523 백왕님 [1] (1.214) 13.03.15 69 0
349521 어이없음 금융권에서 JAVA ORACLE RAD툴 세개 안쓰는데가 있음? [4] 바보아싸갤로그로 이동합니다. 13.03.15 170 0
349520 아 ㅅㅂ 오늘 일찍자야겠다 (1.214) 13.03.15 73 0
349519 유닉스/리눅스 시스템콜 잘아는횽 헬프 [5] help(113.130) 13.03.15 224 0
349517 오늘도 프갤은 [4] (1.214) 13.03.15 97 0
349516 내일 아침 9시 프갤에 피자잭팟 터짐 [1] ㅇㅇ(223.33) 13.03.15 101 0
349515 샤워하고 왔더니 페이지가 넘어가네. fm100(220.76) 13.03.15 48 0
349514 만나서 대결하면 진짜 볼만하겟다 [3] 백이(182.214) 13.03.15 115 0
349511 횽들 지역변수 선언은 제일 위에다 하는게 좋을까 필요할때 마다 그 줄에 [1] 김삼디(110.9) 13.03.15 62 0
349510 프갤 현피하면 서로노트북들고와서 [5] 93년생미필(1.242) 13.03.15 156 0
349508 만나서 승부보면 되겠네 [1] 루비•‿•갤로그로 이동합니다. 13.03.15 95 0
349507 우와 프갤키배클라스짱짱하시네여 [1] 93년생미필(1.242) 13.03.15 65 0
349505 형들은 윈8 어케 생각하냐 [3] 분당살람갤로그로 이동합니다. 13.03.15 129 0
349502 좆뉴비인데 어떤언어에서나 코어라는게 [2] 좆뉴(121.186) 13.03.15 102 0
349500 저런 재밌는거 하고 싶다. [2] 바보아싸갤로그로 이동합니다. 13.03.15 154 0
349499 에피톤 프로젝트 (Epitone Project)_선인장 (Acoustic 에어로홍갤로그로 이동합니다. 13.03.15 57 0
349498 프갤횽들 컴공 신입생인데요, 프로그래밍은 테크트리가 어떻게 되나요? ㅁㄴㅇㄹ(220.117) 13.03.15 95 0
349497 떡밥이 넘쳐나는 프갤. [2] fm100(220.76) 13.03.15 83 0
349494 솔직히 밑에 키배 다 알아듣는분계세요? [2] ㅇㅇ(223.33) 13.03.15 94 0
349493 난 일하는거 따라가기도 힘든데. fm100(220.76) 13.03.15 57 0
349492 프갤이 활발하니 좋네요 [1] 바보아싸갤로그로 이동합니다. 13.03.15 117 0
349491 플밍갤 왜케 활기를 뜀?? [1] youu(121.186) 13.03.15 64 0
349486 백만 팩토리얼 5초안에 짤 실력이면 구글에서 데려감 [5] d(220.94) 13.03.15 227 0
349485 Node js 좀 하다가 걍 python , 뻘글 바보아싸갤로그로 이동합니다. 13.03.15 230 0
349484 싱글게임의 제한을 깨뜨려 주실 분 구합니다. 징기스칸4갤로그로 이동합니다. 13.03.15 40 0
349483 이 상황에서 c(175.208) 13.03.15 61 0
349482 ㅇㅇ형 간단한질문하나만 받아줘 [2] 삐쭊이(211.218) 13.03.15 98 0
349480 글쓴것도 별거 없는데 뭐야 [1] ㅋㄱ(183.96) 13.03.15 87 0
349477 급여인증 [202] ㅇㅇ(119.203) 13.03.15 3511 1
349474 제 1회 프갤 토론 배틀 [2] 백이(182.214) 13.03.15 84 0
349473 싱글게임의 제한을 깨뜨려 주실 분 구합니다. 징기스칸4갤로그로 이동합니다. 13.03.15 44 0
349472 2번 타자 프랑스빵. 자 낚신지 아닌지 나를 시험해보시지 [16] ㅇㅇ(119.203) 13.03.15 215 0
349471 1번 타자 c. 니가 자랑하는 최신 기술이 뭐냐? [4] ㅇㅇ(119.203) 13.03.15 127 0
뉴스 14세 소녀 임신시킨 55세 유튜버…“사랑의 결실” 주장 디시트렌드 07.29
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2