C : String(문자열)

m_ngyeong·2024년 9월 9일
0

C

목록 보기
2/16
post-thumbnail

String(문자열)


C 언어에서 문자열(String)은 문자(char)의 배열로 표현된다. C 언어는 문자열 자료형을 따로 제공하지 않고, 문자열은 '\0' (Null 문자)로 끝나는 문자 배열로 처리된다. 이 때문에 C에서는 문자열을 다룰 때, 배열과 포인터의 개념이 함께 사용된다.

012345
HELLO\0(₩0)

문자 상수:

문자 상수는 표현 가능한 문자 집합의 단일 문자를 작은따옴표(' ')로 묶어 구성한다. 즉, 'A'와 같이 ''로 표기된걸 말한다. 문자 상수는 실행 문자 집합에서 문자를 나타내는 데 사용된다.

예를 들어, 'A'에서 A는 문자값이다. 하지만 char A;에서 A는 문자값이 아닌 문자를 저장하기 위한 변수이다.

문자열 상수:

문자열 상수는 문자열 값을 의미하며, 큰따옴표(" ")로 표현되며 "Nice meet you"와 같은 것들을 말한다.

문자열의 특징

1. 문자 배열로 표현:

문자열은 문자들의 배열이며, 각 문자는 char 자료형으로 저장된다. 문자열의 끝을 나타내는 특별한 문자, 널 문자(\0)가 배열의 마지막에 추가된다. 널 문자가 문자열의 끝을 표시하므로, 문자열의 길이를 자동으로 알 수 있다.

char str[] = "Hello"; 
// 널 문자 포함 배열의 크기는 6 ('H', 'e', 'l', 'l', 'o', '\0')

2. 문자 포인터로 표현:

문자열은 포인터를 사용하여 처리할 수 있으며, 문자열의 시작 주소를 가리키는 포인터를 통해 문자열을 처리할 수 있다. 이 때, 큰따옴표(" ") 안에 문자열을 넣게 되는데 이걸 문자열 리터럴이라고 한다. 즉, 포인터는 문자열을 가리키는 것이 아니라 문자열이 담겨 있는 메모리 주소를 가리킨다.

char *str = "Hello"; // 문자열 리터럴에 대한 포인터

포인터 자체에 문자열을 마치 상수처럼 읽기 전용으로 넣은 것이기에 문자열 변경이 불가능하다. 만약 문자열을 바꾸고 싶다면, 다른 문자열을 해당 포인터가 가리키게 하는 방법을 사용해야 한다.

3. 널 문자(\0):

문자열의 끝을 나타내는 특별한 문자이다. 문자열의 마지막에 반드시 추가되어야 하며, 이 문자가 없으면 배열이 그냥 문자들의 집합일 뿐, 문자열로 인식되지 않는다.

문자열 선언 방법

1. 문자 배열을 사용한 선언:

char str1[] = "Hello";  // 문자열 "Hello"를 문자 배열로 선언
char str1[6] = "Hello";

문자열에 자동으로 \0이 추가되어, 문자열의 길이는 '문자 개수 + 1(\0)'로 설정된다.

2. 문자 배열을개별 문자로 초기화:

char str2[] = {'H', 'e', 'l', 'l', 'o', '\0'};

개별 문자를 지정하여 문자열을 만들 수 있으며, 마지막에 \0 을 반드시 추가해야 한다.

3. 문자 리터럴을 가리키는포인터사용:

char *str3 = "Hello";

문자열 리터럴 "Hello"는 읽기 전용 메모리에 저장되며, str3는 그 메모리의 시작 주소를 가리키는 포인터이다.

문자열 입출력 함수

입력(scanf):

scanf()는 문자열을 입력받을 때 사용하는 함수로 공백을 기준으로 입력을 처리한다.
공백이 포함된 문자열을 입력받을 때는 fgets()를 사용하는 것이 더 좋다.

char str[100];
scanf("%s", &str);  // 공백이 없는 문자열 입력

출력(printf):

printf("%s\n", str);  // 문자열 출력

fgets() & puts():

fgets( char str, int numChars, FILE stream) :

fgets()은 공백을 포함한 문자열을 입력받을 수 있다.

  • char str : 입력받은 문자열
  • int numChars : 입력받은 문자열의 최대 크기('\0' 포함)
  • FILE stream : file로 표준 입력장치에서 데이터를 입력받겠다는 의미
#include <stdio.h>
#include <string.h>

int main() {  
    char str[100];
    fgets(str, sizeof(str), stdin); // 문자열 입력 (공백 포함)
    printf("%s\n", str);
}

→ hello
→ hello
→  

*한 줄이 더 출력되는 것은 fgets()로 입력을 받으면 '\n'가 알아서 문자열 끝에 들어가기 때문이다. printf()에서 개행문자를 빼면 된다.

puts() :

puts()은 줄바꿈 문자를 자동으로 추가하여 문자열을 출력한다.

puts(str);  // 문자열 출력 (자동으로 줄바꿈 추가)

문자열 처리 함수

C 언어에서는 문자열을 다루는 여러 표준 라이브러리 함수들이 제공되며, 이들은 <string.h> 헤더 파일에 포함되어 있다.

1. strlen() : 문자열의 길이를 구함(널 문자는 포함하지 않음).

size_t len = strlen(str);  // 문자열의 길이를 반환

2. strcpy() : 문자열을 복사.

strcpy(dest, src);  // src 문자열을 dest로 복사

3. strcat (): 두 문자열을 이어 붙임.

strcat(dest, src);  // dest 뒤에 src를 붙임

4. strcmp() : 두 문자열을 비교.

int result = strcmp(str1, str2);  // str1과 str2를 비교
  • str1과 str2가 같으면 0 반환
  • str1가 str2보다 사전적으로 앞에 있으면 -1 반환
  • str1가 str2보다 사전적으로 뒤에 있으면 1 반환

5. strstr() : 문자열을 찾아 위치를 반환.

strstr()은 찾은 주소값 자체를 반환하기 때문에 찾은 문자부터 그 이후의 모든 문자열을 반환한다.

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

int main() {
    char str1[20] = "the real programmer";
    char str2[20] = "real";
    printf("찾은 문자열: %s\n", strstr(str1, str2));

    return 0;
}

→ 찾은 문자열: real programmer

Example:

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

int main() {
    char str1[100], str2[100];

    // 문자열 입력 받기
    printf("Enter first string: ");
    fgets(str1, sizeof(str1), stdin);

    printf("Enter second string: ");
    scanf("%s", &str2);

    // 문자열 길이 출력
    printf("Length of first string: %lu\n", strlen(str1));
    printf("Length of second string: %lu\n", strlen(str2));

    // 두 문자열을 이어 붙이기
    strcat(str1, str2);
    printf("Concatenated string: %s\n", str1);

    return 0;
}


참고,
https://learn.microsoft.com/ko-kr/cpp/c-language/?view=msvc-170
https://eunjinii.tistory.com/28

profile
사용자 경험 향상과 지속적인 성장을 추구하는 프론트엔드 개발자 ʚȉɞ

0개의 댓글