이번 글은 서강대학교 소정민 교수님의 강의와 Ellis Horowitz의「Fundamentals of Data Structures in C」를 바탕으로 작성했음을 밝힙니다.
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 is an empty or null string.
컴퓨터 프로그래밍에서 문자열은 기호의 순차 수열을 말한다. String이라고도 한다. 이러한 기호는 미리 정의된 집합이나 음소 문자에서 선택한다.
프로그래밍에서 문자열은 일반적으로 요소가 문자 인코딩과 관련된 문자를 대표하는 일련의 자료값을 저장하고 있는 자료형으로 이해할 수 있다.
보통 String을 character들을 array로 표현한 것이라고 생각할 수 있는데, String은 이렇게 단순한 것 이상이다. String만의 특별한 표현 방법(C에서는 끝에 NULL문자를 넣음)이 있고, String만의 operation이 굉장히 많이 때문에 하나의 특별한 자료형으로 볼 수 있다.
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);
}
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);
}
}