문자열

바둑이·2022년 4월 11일
0

이번에는 C언어 에서 문자열에 대해 정리했습니다. 잘못된 부분이 있다면 지적해 주시면 바로 수정하겠습니다. 감사합니다.

  • 문자열(string)

    	문자열은 char타입의 배열의 각 칸마다 문자 하나씩 저장됨
    
    	char str[6];
    	str[0] = 'h';
    	str[1] = 'e';
    	str[2] = 'l';
    	str[3] = 'l';
    	str[4] = 'o';
    	str[5] = '\0'; // null character('\0')는 문자열의 끝을 표시하는 역할을 한다.
    				   // 즉 배열의 크기가 문자열의 길이보다 적어도 1만큼 길어야 한다.
    
    	C 언어는 문자열을 생성하는 편리한 방법을 제공
    
    	char str[] = "hello";
    
    	혹은
    
    	char *str = "hello"; // 하지만 이렇게 정의된 문자열은 수정이 불가능하다는 점에서 위의 두 방법과 다르다.
    						 // 이것을 string literal이라고 부른다.
  • string.h 라이브러리 함수

    	string.h 라이브러리는 문자열을 다루는 다양한 함수를 제공
    
    	strcpy // 문자열 복사
    
    	strlen // 문자열의 길이
    
    	strcat // 문자열 합치기
    
    	strcmp // 문자열 비교
  • 문자열들의 저장

    	여러개의 단어들을 포인터를 이용하여 저장해보자.
    
    
    	#include <stdio.h>
    	#include <stdlib.h>
    	#include <string.h>
    
    	#define BUFFER_SIZE 100
    
    	int main()
    	{
    		char* words[100];
    		int n = 0; // number of strings
    		char buffer[BUFFER_SIZE];
    
    		while (n < 4 && scanf("%s", buffer) != EOF) {
    			words[n] = strdup( buffer);
    			n++;
    		}
    
    		for (int i = 0; i < 4; i++) {
    			printf("%s\n", words[i]);
    		}
    	}
    
    	입력 : abcd bacd cabd dabc
    
    	출력 : abcd bacd cabd dabc
  • 문자열 복사 : strdup

    	매개변수로 받은 하나의 문자열을 복제하여 반환한다.
    
    	char * strdup(char *s)
    	{
    		char *p;
    		p = (char *)malloc(strlen(s)+1);
    		if(p != NULL)
    			strcpy(p, s);
    		return p;
    	}
  • 파일로부터 읽기

    	#include <stdio.h>
    
    	void main() {
    		FILE * fp = fopen("input.txt", "r");
    		char buffer[100];
    		while(fscanf(fp, "%s", buffer) != EOF)
    			printf("%s", buffer);
    		fclose(fp);
    	}
  • 파일 읽고 쓰기

    	#include <stdio.h>
    
    	void main() {
    		FILE * in_fp = fopen("input.txt", "r");
    		FILE * out_fp = fopen("output.txt", "w");
    		char buffer[100];
    		while(fscanf(fp, "%s", buffer) != EOF)
    			fprintf(out_fp, "%s", buffer);
    		fclose(in_fp);
    		fclose(out_fp);
    	}
profile
안녕하세용('<')/

0개의 댓글