[운영체제실무] 문자열

📌 문자열

✔헤더파일 string.h

📖 문자열 길이 계산

size_t strlen(const char*s)

인자 s는 널로 끝나는 문자열
마지막 널 문자를 제외한 총 바이트 수를 이 문자열의 길이로 리턴

size_t strspn(const char*s1, const char*2)

s2의 모든 문자열을 포함하는 s1의 첫째 세그먼트 길이를 리턴

size_t strcspn(const char*s1, const char*s2)

s2의 모든 문자열을 포함하지 않는 s1의 첫째 세그먼트 길이를 리턴

✍실습

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

int main(){

    printf(%d\n", strlen("abcde")); 
    printf(%d\n", strspn("unix", "niua")); //출력값 3 (uni)
    printf(%d\n", strspn("unix", "niax")); //출력값이 0인 이유 : u가 없어서 끝남
    printf(%d\n", strcspn("unix", "niau")); //출력값 0인 이유 : 처음부터 봤을때 u가 있어서 0
    printf(%d\n", strcspn("unix", "abi")); //출력값 2 (있으면 끝냄)

    exit(0);
}

💻 출력

5
3
0
0
2

📖 문자열 비교

int strcmp(const*s1, const char*s2)

s1과 s2를 비교하여 s1이 사전 순서상 앞에 나오면 음수(-), 같으면 영(0), 뒤에 나오면 양수(+)를 리턴
(앞에 문자열이 크면 음수, 뒤에 문자열이 크면 양수, 같으면 0)
ex) abc와 de를 비교하면 a와 d를 비교했을 때 d가 크기 때문에 de가 큼

int strncmp(const char*s1, char*s2, size_t n)

문자열의 처음 n개의 문자만 비교

✍실습

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

int main() {
	int cmp;

	cmp = strcmp("abc", "Bc");

	if (cmp > 0)
		printf("s1 is greater than s2\n");
	else if (cmp < 0)
		printf("s2 is greater than s1\n");
	else
		printf("s1  is equal to s2\n");


	cmp = strncmp("abc", "abd", 2);

	if (cmp > 0)
		printf("s1 is greater than s2\n");
	else if (cmp < 0)
		printf("s2 is greater than s1\n");
	else
		printf("s1  is equal to s2\n");
	exit(0);
}

💻 출력

s1 is greater than s2
s1  is equal to s2

📖 문자열 복사

char*strcpy(char*dst, const char*src)

src가 가리키는 문자열을 dst가 가리키는 배열에 복사하고 dst값을 리턴

char*strncpy(char*dst, const char*src, size_t n)

src가 가리키는 문자열을 dst가 가리키는 배열에 n개 복사하고 dst값을 리턴

✍실습

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

int main() {
	char *dst;
	char src[50] = "Unix system Programming";
	
	dst = (char *)malloc(sizeof(char) * 50); //메모리를 얼마나 사용할지 모를때 동적할당

	strcpy(dst, src); 
    printf("%s\n", dst);

	strncpy(dst, src, 11); 
	printf("%s\n", dst);

	exit(0);
}

💻 출력

Unix system Programming
Unix system

📖 문자열 결합

char *strcat(char*dst, const char*src)

dst가 가르키는 문자열 뒤에 src가 가리키는 문자열을 널 바이트 만날 때까지 읽어 붙이고 dst 문자열을 반환

char*strncat(char*dst, const char*src, size_t n)

src가 가리키는 문자열 중 n개를 dst가 가리키는 문자열뒤에 읽어 붙이고 dst 문자열을 반환

✍실습

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

int main() {
	char dst[13] = "Unix system "; 
	char src[12] = "Programming";  

	printf("%s\n", strcat(dst, src)); 
	printf("%s\n", dst); 

	printf("%s\n", strncat(dst, src, 5));
	exit(0);
}

💻 출력

Unix system Programming
Unix system Programming
Unix system Progr

📖 문자 탐색

char*strchr(const char*s, int c)

문자열 s중 처음 나타나는 문자 c의 포인터를 리턴
ex) abc 와 b 이면 bc
ex) abcbd 와 b이면 bcbd

char*strrchr(const char*s, int c)

문자열 s중 뒤에서 처음 나타나는 문자 c의 포인터를 리턴
ex) abc 와 b이면 bc
ex) abcbd 와 b이면 bd

✍실습

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

int main() {
	char str[25] = "Unix system Programming";

	printf("%s\n", strchr(str, 'm')); 
	printf("%s\n", strrchr(str, 'm')); 

	exit(0);
}

💻 출력

m Programming
ming
char*strpbrk(const char*s1, const char*s2)

문자열 s1중 문자열 s2가 가리키는 문자 중 어느 문자든지 처음 등장한 곳의 포인터를 리턴
ex) abc와 bc이면 bc

✍실습

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

int main() {
	char str[25] = "Unix system Programming";
	int s_idx;

	printf("%s\n", strpbrk(str, "abcn")); 
	
	printf("%d\n", strlen(str) - strlen(strpbrk(str, "abcnm"))); //출력값 1 :몇번째에 있는지
	s_idx = strlen(str) - strlen(strpbrk(str, "abcnm"));

	printf("%c\n", str(strlen(str) - strlen(strpbrk(str, "abcnm")))); 
	printf("%c\n", str(s_idx)); //출력값 n :무슨 글씨를 찾았는지

	exit(0);
}

💻 출력

nix system Programming
1
n
n

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

✍실습

#include <stdio.h>

void markline(char* line, char* start, char* stop) {
	char* p;

	for (p = line; p < strat; p++)
		*p = ' ';
	for (p = start; p <= stop; p++)
		*p = '^';
	for (p = stop + 1; *p != '\0'; p++)
		*p = ' ';
} //unix에서 i를 찾으면 u공백 n공백 i^ x공백

💻 출력

unix
  ^

📖 문자열 탐색

char*strstr(const char*s1, const char*s2)

문자열 s1중 부분 문자열 s2가 처음 나타나는 포인터를 리턴

✍실습

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

int main() {
	char str[25] = "Unix system programming";
	char srstr[4] = "nix";
	int start;
	char* find_str;

	printf("search %s in %s\n", srstr, str); //unix system programming에서 nix를 찾는데
	printf("search %s\n", strstr(str, srstr));
	printf("search %s\n", strstr(str, "Uix")) //찾는 문자가 없음


	start = strlen(str) - strlen(strstr(str, srstr)); 

	printf("%d \n", start);

	exit(0);
}

💻 출력

search nix in Unix system programming
search nix system programming
search (null)
1

찾는 문자열이 없을 때
✍실습

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

int main() {
	char str[25] = "Unix system programming";
	char srstr[4] = "Uix";
	int start;
	char* find_str;

	printf("search %s in %s\n", srstr, str);

	if ((find_str == strstr(str,srstr) == NULL))
			printf("%s not found in %s\n", srstr, str);
	else {
		printf("search %s\n", strstr(str, srstr)); 
		start = strlen(str) - strlen(strstr(str, srstr));
		printf("%d \n", start); 
	}
	exit(0);
}

💻 출력

search Uix in Unix system Programming
Uix not Found in Unix System Programming
1

📖 문자열 토큰 분리

토큰(token) : 프로그래밍 언어에서 문법적으로 더 이상 나눌 수 없는 기본적인 언어요소
ex) 키워드, 연산자, 구두점

char *strtok(char *1, const char*s2)

문자열 s1을 문자열 s2에 있는 토큰을 기준으로 문자열 분리

✍실습

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

int main() {
	char buf[0] = "5:10:45";
	char* token;

	printf("tokenizing \"%s\" with strtok():\n", buf);

	if ((token = strtok(buf, ":")) != NULL) {
		printf("token=\"s\"\n", token);
		while ((token = strtok(NULL, ":")) != NULL) { //계속 찾기 위해 while문, 나오는곳부터 다시 찾기 위해 NULL
			printf("token=\"%s\"\n", token);
		}
	}
}

💻 출력

tokenizing "5:10:45" with strtok():
token="5"
token="10"
token="45"

좋은 웹페이지 즐겨찾기