1. 재설정 문자열
보이드 sdsclear (SDS S) { // sdshdr 제거 구조체 sdshdr의 SH * = ( 공극 *)을 (S- ( sizeof의 ( 구조체 sdshdr가))); // 속성 계산 SH-> 무료 + = SH-> 렌; SH - > 렌 = 0 ; // 전방 단부에 위치하는 캐릭터 (BUF 삭제 불활성 상당) SH-> [BUF 0 ] = ' \ 0 ' ; }
2. 모바일 문자열
/ * * Sds 일 남은 모든 문자 지정된 CSET 클리어 트림의 우단 * * 이러한 sdsstrim (xxyyabcyyxy "XY")을 반환 "ABC" * * 복잡성 : * T = O (M의 *의 N), M SDS는 길이 N 인 CSET 길이이다. * / SDS의 sdstrim (SDS S, CONST 숯 *의 CSET) { 구조체 sdshdr의 SH * = ( 무효 *) (S- ( sizeof의 ( 구조체 sdshdr))); CHAR * 시작, 종료 * * SP * EP; size_t와 LEN ; // 기록 포인터를 설정하고 SP = 시작 = S; EP의 = S + =의 최종 sdslen (S) - 1이다. ] // , T = O (N ^ 2) 트리밍 그동안을(SP <= 최종 && strchr과 (CSET, SP의 *)) SP ++ ; 그동안 (EP>를 strchr과 시작 && (CSET, EP *)) ep-- ; //는 트림 완료 후 스트링의 나머지 길이를 계산 LEN = (SP를> EP)? 0 : ((EP-SP) + . 1 ); // 필요한 경우, 문자열의 내용 순방향 // T = O (N) IF ! (SH-> BUF = SP) memmove를 (SH-> BUF , SP, LEN은) // 터미네이터 추가 SH-> BUF [LEN] = ' \ 0 ' ; // 업데이트 속성 SH-> 무료 = SH-> 무료 + (SH-> LEN LEN) SH -> = LEN LEN; // 리턴 치기 SDS 후 돌아 들; }
3. 차단 문자열
보이드 sdsrange (SDS의 S, INT의 시작 INT의 단부) { 구조체 sdshdr의 쉬 * = ( 무효 *) (S- ( 는 sizeof ( 구조체 sdshdr))); 이 size_t newlen 렌 = sdslen (S); 만약 LEN (== 0 ) 창 ; 경우 (시작 < 0 ) { 시작 = LEN +를 시작; 경우 (시작 < 0 ) 시작 = 0 ; } 경우 (단 < 0 ) { 단 = LEN +종료; 경우 (단 < 0 ) 단부 = 0 ; } newlen = (시작> 종료)? 0 (단 스타트) + 1 ; 경우 (! = newlen 0 ) { 경우 (시작> = () 렌 서명) { newlen = 0 ; } 다른 경우 (단부> = {() LEN 서명) 단부 = len- 1 ; newlen = (시작> 종료)? 0 (단 스타트) + 1 ; } }다른 { 시작 = 0 ; } // 필요한 경우, 캐릭터 이동 // T = O (N)를 IF (시작 && newlen) memmove를 (SH-> BUF, SH-> + BUF 시작 newlen) // 터미네이터를 추가 SH-> 버피 [newlen] = 0 ; // 업데이트가 속성 SH-> 무료 = SH-> 무료 + (SH-> 렌 newlen), SH -> LEN = newlen; }