데이터 구조 학습 (10) - 직렬 작업

5748 단어
며칠 동안 데이터 구 조 를 보지 않 고 오늘 다시 시작 했다.
    문자열 은 특수 한 선형 표 로 모든 노드 가 하나의 문자 이기 때문에 문자열 도 문자열 이 라 고 부른다.
    문자열 에 대한 작업 은 주로 문자열 길이, 문자열 복사, 문자열 연결, 문자열 삽입, 문자열 삭제, 문자열 위치 확인 등 이 있 습 니 다.꼬치 의 조작 도 C 언어 필기시험 에서 자주 보 는 일부분 이다.
    아래 의 코드 는 문자열 의 주요 조작 을 실현 하 였 다.
#include <stdio.h>
#include <stdlib.h>

#define MAXSIZE 20
char *String_Create();					//   
int String_Length(char *s);				//   
void String_Show(char *s);				//   
char *String_Copy(char *d, char *s);	//   
char *String_Connect(char *d, char *s);	//   
char *String_SubStr(char *d, char *s, int pos, int len);	//   
int String_Compare(char *d, char *s);	//   
char *String_Insert(char *d, char *s, int pos);		//   
char *String_Delete(char *d, int pos, int len);		//   
int String_Index(char *d, char *s, int pos);		//   

int main(void)
{
	int choice;
	char *str, *c;
	int ans, pos, len;

	c = (char*)malloc(sizeof(MAXSIZE));
	printf("        (  10   ):
"); str = String_Create(); while(1) { printf("***************************
"); printf(" :
"); printf("1.
"); printf("2.
"); printf("3.
"); printf("4.
"); printf("5.
"); printf("6.
"); printf("7.
"); printf("8.
"); printf("9.
"); printf("10.
"); printf(" :
"); scanf("%d", &choice); getchar(); switch(choice) { case 1: ans = String_Length(str); printf(" %d
", ans); break; case 2: c = String_Copy(c, str); printf(" :
"); String_Show(c); break; case 3: printf(" ( 10 )
"); gets(c); c = String_Connect(c, str); printf("
"); String_Show(c); break; case 4: printf("
"); scanf("%d %d", &pos, &len); c = String_SubStr(c, str, pos, len); if(c == NULL) printf(" !
"); else { printf(" :
"); String_Show(c); } break; case 5: printf(" :
"); gets(c); ans = String_Compare(c, str); if(ans>0) printf("
"); else if(ans<0) printf("
"); else printf("
"); break; case 6: printf("
"); gets(c); printf(" :
"); scanf("%d", &pos); str = String_Insert(str, c, pos); printf(" :
"); String_Show(str); break; case 7: printf("
"); scanf("%d %d", &pos, &len); str = String_Delete(str, pos, len); break; case 8: printf(" :
"); gets(c); ans = String_Index(str, c, 1); printf(" %d
", ans); break; case 9: String_Show(str); break; case 10: return 0; break; default: printf(" !
"); break; } } return 1; } // char *String_Create() { char *s, ch; int i = 0; s = (char*)malloc(MAXSIZE); ch = getchar(); while(ch != '#') { *(s+i) = ch; i++; ch = getchar(); } if(i > MAXSIZE/2) printf(" 10!
"); else *(s+i) = '\0'; return s; } // int String_Length(char *s) { int l=0; while(*s != '\0') { l++; s++; } return l; } // char *String_Copy(char *d, char *s) { char *c; c = d; while((*d++=*s++)!='\0'); return c; } // char *String_Connect(char *d, char *s) { char *c; int l, i=0;; c = d; l = String_Length(d); d = d + l; while((*d++ = *s++) != '\0'); // return c; } // char *String_SubStr(char *d, char *s, int pos, int len) { char *c1, *c2=NULL; int l, i; c2 = (char*)malloc(MAXSIZE/2); c1 = s; d = c2; l = String_Length(s); if(pos>l || pos<1) // return NULL; if(len<0) // return NULL; c1 = c1 + pos - 1; for(i=1; i<=len && *c1 != '\0'; i++) // { *c2++ = *c1++; } *c2 = '\0'; // return d; } // int String_Compare(char *d, char *s) { char *c1, *c2; c1 = d; c2 = s; while(*c1 != '\0' || *c2 != '\0') { if(*c1 > *c2) return 1; else if(*c1 < *c2) return -1; c1++; c2++; } if(*c1 == '\0' && *c2 == '\0') // , return 0; else if(*c2 == '\0') // , return 1; else return -1; } // char *String_Insert(char *d, char *s, int pos) { int i, ld,ls; char *c1, *c2; c1 = d; c2 = s; ld = String_Length(d); ls = String_Length(s); for(i=ld; i>=pos-1; i--) // , *(c1 + ls + i) = *(c1 + i); for(i=pos; i<=pos+ls-1; i++) // *(c1 + i - 1) = *c2++; *(c1 + ld + ls) = '\0'; // return d; } // char *String_Delete(char *d, int pos, int len) { int i, l; l = String_Length(d); if(pos + len > l) // , *(d + pos -1) = '\0'; else { for(i=pos+len-1; i<=l; i++) *(d + i - len) = *(d + i); *(d + l - len) = '\0'; // } return d; } // int String_Index(char *d, char *s, int pos) { int i = pos - 1, j = 0, ld, ls, b=0; ld = String_Length(d); ls = String_Length(s); while(i < ld && j<ls) { if(*(d+i) == *(s+j)) // , { i++; j++; } else // { i = i - j + 1; j = 0; } } if(j == ls) // return (i - ls + 1); else return 0; } // void String_Show(char *s) { while(putchar(*s++)); printf("
"); }

위의 코드 는 바로 문자열 과 관련 된 조작 이다.

좋은 웹페이지 즐겨찾기