[DataStructure] String

토즐라·2022년 4월 21일
0

이번 글은 서강대학교 소정민 교수님의 강의와 Ellis Horowitz의「Fundamentals of Data Structures in C」를 바탕으로 작성했음을 밝힙니다.

문자열(String)

From Textbook

A string has characters as component elements. As an ADT, we define a string to have the form, S = s_0, ... , s_{n-1}, where s_i are characters taken from the character set of the programming language. If $n=0, then SS is an empty or null string.

From Wiki

컴퓨터 프로그래밍에서 문자열은 기호의 순차 수열을 말한다. String이라고도 한다. 이러한 기호는 미리 정의된 집합이나 음소 문자에서 선택한다.
프로그래밍에서 문자열은 일반적으로 요소가 문자 인코딩과 관련된 문자를 대표하는 일련의 자료값을 저장하고 있는 자료형으로 이해할 수 있다.

Professor's Comment

보통 String을 character들을 array로 표현한 것이라고 생각할 수 있는데, String은 이렇게 단순한 것 이상이다. String만의 특별한 표현 방법(C에서는 끝에 NULL문자를 넣음)이 있고, String만의 operation이 굉장히 많이 때문에 하나의 특별한 자료형으로 볼 수 있다.

1.1 ADT

  • Operation: A finite sequence of zero or more characters.
  • Functions: String Null(m), Integer Compare(s, t), Boolean IsNull(s), Integer Lengths, String Concat(s, t)

구현

ex013

concatenating string

#include <stdio.h>
#include <stdlib.h>
#pragma warning(disable:4996)

void main() {
  char s[] = "dog";
  char t[] = "house";
  char u[] = "rainbow";
  printf("%p: %s\n", s, s);
  printf("%p: %s\n", t, t);
  printf("%p: %s\n", u, u);
  printf("\n");
  strcat(s, u);
  printf("%s\n", s);
  printf("%s\n", t);
  printf("%s\n", u);
}

ex014

string insertion

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#pragma warning(disable:4996) //strcpy, strncpy를 이용할 경우 VS에서 뜨는 오류 무시
#define MAX_SIZE 100

void StringInsert(char*, char*, int);

void main() {
	char s[MAX_SIZE] = "cputer";
	char t[MAX_SIZE] = "om";
	StringInsert(s, t, 1);
	printf("%s\n", s);
}

void StringInsert(char* s, char* t, int i) {
	char string[MAX_SIZE];
	char* temp = string; //malloc을 이용해도 됨

	if (i<0 || i>strlen(s)) {
		fprintf(stderr, "position out of bound.\n");
		exit(1);
	}

	if (!strlen(s))
		strcpy_s(s, MAX_SIZE, t);
	else if (strlen(t)) {
		strncpy_s(temp, MAX_SIZE, s, i);
		strcat(temp, t);
		strcat(temp, (s + i)); //temp와 s의 i번째 문자열 concat
		strcpy_s(s, MAX_SIZE, temp);
	}
}
profile
Work Hard, Play Hard 🔥🔥🔥

0개의 댓글