λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μΉ΄ν…Œκ³ λ¦¬ μ—†μŒ

νŠΉμ • λ¬Έμžμ—΄ μ°ΎκΈ°/검색 &μΉ˜ν™˜ strstr ν•¨μˆ˜ μ‚¬μš©λ²• & 예제

by 5566 2023. 9. 27.

1. νŠΉμ • λ¬Έμžμ—΄ μ°ΎκΈ°/κ²€μƒ‰μ˜ μ˜λ―Έμ™€ ν•„μš”μ„±

νŠΉμ • λ¬Έμžμ—΄μ„ μ°ΎκΈ° λ˜λŠ” κ²€μƒ‰ν•˜λŠ” 것은 λ§Žμ€ μƒν™©μ—μ„œ ν•„μš”ν•œ μž‘μ—…μž…λ‹ˆλ‹€. λ¬Έμžμ—΄μ€ ν”„λ‘œκ·Έλž˜λ°μ΄λ‚˜ 데이터 μ²˜λ¦¬μ—μ„œ μ€‘μš”ν•œ 역할을 ν•˜λ©°, νŠΉμ • λ¬Έμžμ—΄μ„ μ°ΎλŠ” 것은 ν•΄λ‹Ή λ¬Έμžμ—΄μ„ ν¬ν•¨ν•˜κ³  μžˆλŠ” μœ„μΉ˜λ‚˜ 쑴재 μ—¬λΆ€λ₯Ό ν™•μΈν•˜κΈ° μœ„ν•œ κΈ°λŠ₯μž…λ‹ˆλ‹€. νŠΉμ • λ¬Έμžμ—΄ μ°ΎκΈ°/κ²€μƒ‰μ˜ μ˜λ―Έμ™€ ν•„μš”μ„±μ— λŒ€ν•΄ μ‚΄νŽ΄λ³΄λ©΄ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

1.1 νŠΉμ • λ¬Έμžμ—΄μ˜ μœ„μΉ˜ νŒŒμ•…

νŠΉμ • λ¬Έμžμ—΄μ„ μ°ΎλŠ” 것은 주어진 λ¬Έμžμ—΄ λ‚΄μ—μ„œ ν•΄λ‹Ή λ¬Έμžμ—΄μ΄ μ‹œμž‘ν•˜λŠ” μœ„μΉ˜λ₯Ό νŒŒμ•…ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€. μ΄λŠ” ν”„λ‘œκ·Έλž˜λ°μ—μ„œ νŠΉμ • νŒ¨ν„΄μ΄λ‚˜ ν‚€μ›Œλ“œκ°€ 어디에 μœ„μΉ˜ν•΄ μžˆλŠ”μ§€ ν™•μΈν•˜λŠ” 데에 맀우 μœ μš©ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, 주어진 λ¬Έμžμ—΄ μ€‘μ—μ„œ νŠΉμ •ν•œ 단어λ₯Ό μ°Ύκ±°λ‚˜ νŠΉμ •ν•œ λ¬Έμžμ—΄ νŒ¨ν„΄μ΄ μ‘΄μž¬ν•˜λŠ”μ§€ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

1.2 λ¬Έμžμ—΄ 포함 μ—¬λΆ€ 확인

νŠΉμ • λ¬Έμžμ—΄μ„ μ°ΎλŠ” 것은 ν•΄λ‹Ή λ¬Έμžμ—΄μ΄ 주어진 λ¬Έμžμ—΄ 내에 ν¬ν•¨λ˜μ–΄ μžˆλŠ”μ§€ μ—¬λΆ€λ₯Ό κ²€μ‚¬ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€. μ΄λŠ” μ‚¬μš©μžκ°€ μž…λ ₯ν•œ λ¬Έμžμ—΄μ—μ„œ νŠΉμ •ν•œ 문자 λ˜λŠ” 단어λ₯Ό ν¬ν•¨ν•˜κ³  μžˆλŠ”μ§€ μ—¬λΆ€λ₯Ό ν™•μΈν•˜λŠ”λ° ν™œμš©λ©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ νŠΉμ • λͺ¨λΈλͺ…을 κ²€μƒ‰ν•˜λŠ” 경우, ν•΄λ‹Ή λͺ¨λΈλͺ…이 주어진 λ¬Έμžμ—΄ 내에 ν¬ν•¨λœ κ²½μš°μ—λ§Œ 검색 κ²°κ³Όκ°€ λ°˜ν™˜λ  수 μžˆμŠ΅λ‹ˆλ‹€.

1.3 효율적인 데이터 처리

νŠΉμ • λ¬Έμžμ—΄μ„ μ°ΎλŠ” 것은 ν”„λ‘œκ·Έλž¨μ΄λ‚˜ 데이터 처리 κ³Όμ •μ—μ„œ 효율적인 μž‘μ—…μ„ μœ„ν•΄ ν•„μš”ν•©λ‹ˆλ‹€. λ¬Έμžμ—΄ 검색은 λŒ€μš©λŸ‰ λ°μ΄ν„°μ—μ„œ μ›ν•˜λŠ” 정보λ₯Ό λΉ λ₯΄κ²Œ μ°ΎλŠ” 데 μ‚¬μš©λ˜λ©°, μ•Œκ³ λ¦¬μ¦˜κ³Ό κ΄€λ ¨λœ μ΅œμ ν™” 기법이 적용될 수 μžˆμŠ΅λ‹ˆλ‹€. νŠΉμ • λ¬Έμžμ—΄ μ°ΎκΈ°/κ²€μƒ‰μ˜ ν•„μš”μ„±μ€ 데이터 처리 μ„±λŠ₯ ν–₯상과 κ΄€λ ¨λœ μš”κ΅¬μ‚¬ν•­μ„ μΆ©μ‘±μ‹œν‚€λŠ” 데에 큰 도움을 μ€λ‹ˆλ‹€.

νŠΉμ • λ¬Έμžμ—΄ μ°ΎκΈ°/κ²€μƒ‰μ˜ μ˜λ―Έμ™€ ν•„μš”μ„±μ„ μ‚΄νŽ΄λ³΄μ•˜μŠ΅λ‹ˆλ‹€. 이후, 본격적으둜 strstr ν•¨μˆ˜μ˜ κ°œλ…κ³Ό μ‚¬μš©λ²•μ— λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

2. strstr ν•¨μˆ˜μ˜ κ°œλ…κ³Ό μ‚¬μš©λ²•

strstr ν•¨μˆ˜λŠ” C μ–Έμ–΄μ—μ„œ μ œκ³΅λ˜λŠ” λ¬Έμžμ—΄ ν•¨μˆ˜λ‘œ, 주어진 λ¬Έμžμ—΄μ—μ„œ νŠΉμ • λ¬Έμžμ—΄μ„ μ°Ύκ³  ν•΄λ‹Ή λ¬Έμžμ—΄μ΄ μ‹œμž‘ν•˜λŠ” μœ„μΉ˜λ₯Ό λ°˜ν™˜ν•˜λŠ” κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€. strstr ν•¨μˆ˜μ˜ κ°œλ…κ³Ό μ‚¬μš©λ²•μ— λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

2.1 κ°œλ…

strstr ν•¨μˆ˜λŠ” λ‹€μŒκ³Ό 같은 ν˜•μ‹μœΌλ‘œ μ„ μ–Έλ©λ‹ˆλ‹€.

#include <string.h>

char* strstr(const char* haystack, const char* needle);
  • haystack: 주어진 λ¬Έμžμ—΄μ—μ„œ νŠΉμ • λ¬Έμžμ—΄μ„ 찾을 λŒ€μƒ λ¬Έμžμ—΄μž…λ‹ˆλ‹€.
  • needle: μ°ΎμœΌλ €λŠ” νŠΉμ • λ¬Έμžμ—΄μž…λ‹ˆλ‹€.

strstr ν•¨μˆ˜λŠ” haystack λ¬Έμžμ—΄ μ€‘μ—μ„œ needle λ¬Έμžμ—΄μ΄ 첫 번째둜 λ‚˜νƒ€λ‚˜λŠ” μœ„μΉ˜λ₯Ό μ°Ύμ•„ ν•΄λ‹Ή μœ„μΉ˜μ˜ 포인터λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€. λ§Œμ•½ needle λ¬Έμžμ—΄μ„ 찾을 수 μ—†λŠ” κ²½μš°μ—λŠ” NULL을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

2.2 μ‚¬μš©λ²•

strstr ν•¨μˆ˜μ˜ μ‚¬μš©λ²•μ„ 예제λ₯Ό 톡해 μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

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

int main() {
    char haystack[] = "Hello, world!";
    char needle[] = "world";

    char* result = strstr(haystack, needle);

    if (result != NULL) {
        printf("찾은 μœ„μΉ˜: %ld\n", result - haystack);
    } else {
        printf("찾을 수 μ—†μŒ\n");
    }

    return 0;
}

μœ„ μ˜ˆμ œμ—μ„œ haystack λ¬Έμžμ—΄μ—μ„œ needle λ¬Έμžμ—΄μ„ μ°Ύκ³  κ·Έ μœ„μΉ˜λ₯Ό 좜λ ₯ν•˜λŠ” μ˜ˆμ œμž…λ‹ˆλ‹€. strstr(haystack, needle)λ₯Ό ν˜ΈμΆœν•˜μ—¬ λ¬Έμžμ—΄μ„ 찾은 ν›„, λ°˜ν™˜λœ 포인터λ₯Ό μ΄μš©ν•˜μ—¬ μœ„μΉ˜λ₯Ό κ³„μ‚°ν•˜κ³  좜λ ₯ν•©λ‹ˆλ‹€.

μ‹€ν–‰ κ²°κ³ΌλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

찾은 μœ„μΉ˜: 7

μœ„ μ˜ˆμ œμ—μ„œλŠ” "world"λΌλŠ” λ¬Έμžμ—΄μ΄ "Hello, world!"λΌλŠ” λ¬Έμžμ—΄μ—μ„œ 7번째 μΈλ±μŠ€λΆ€ν„° μ‹œμž‘ν•œλ‹€λŠ” 것을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

strstr ν•¨μˆ˜λŠ” λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•˜μ—¬ λ¬Έμžμ—΄μ„ μ°ΎκΈ° λ•Œλ¬Έμ—, λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•˜μ§€ μ•Šκ³  찾고자 ν•˜λŠ” κ²½μš°μ—λŠ” 좔가적인 μ²˜λ¦¬κ°€ ν•„μš”ν•©λ‹ˆλ‹€.

strstr ν•¨μˆ˜μ˜ κ°œλ…κ³Ό μ‚¬μš©λ²•μ„ μ•Œμ•„λ³΄μ•˜μŠ΅λ‹ˆλ‹€. 이후, strstr ν•¨μˆ˜λ₯Ό ν™œμš©ν•œ λ¬Έμžμ—΄ μ°ΎκΈ°/검색 예제λ₯Ό μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

3. strstr ν•¨μˆ˜λ₯Ό ν™œμš©ν•œ λ¬Έμžμ—΄ μ°ΎκΈ°/검색 예제

strstr ν•¨μˆ˜λ₯Ό ν™œμš©ν•˜μ—¬ λ¬Έμžμ—΄ μ°ΎκΈ° λ˜λŠ” 검색을 μˆ˜ν–‰ν•˜λŠ” μ˜ˆμ œμ— λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. μ•„λž˜ μ˜ˆμ œλŠ” μ‚¬μš©μžλ‘œλΆ€ν„° μž…λ ₯받은 λ¬Έμžμ—΄μ—μ„œ νŠΉμ • 단어λ₯Ό μ°ΎλŠ” ν”„λ‘œκ·Έλž¨μž…λ‹ˆλ‹€.

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

int main() {
    char text[100];
    char word[20];

    printf("λ¬Έμžμ—΄μ„ μž…λ ₯ν•˜μ„Έμš”: ");
    fgets(text, sizeof(text), stdin);

    printf("찾을 단어λ₯Ό μž…λ ₯ν•˜μ„Έμš”: ");
    scanf("%s", word);

    // κ°œν–‰ 문자 제거
    text[strlen(text) - 1] = '\0';

    char* result = strstr(text, word);

    if (result != NULL) {
        printf("단어λ₯Ό 찾음!\n");
    } else {
        printf("단어λ₯Ό 찾을 수 μ—†μŒ\n");
    }

    return 0;
}

μœ„ μ˜ˆμ œλŠ” μ‚¬μš©μžλ‘œλΆ€ν„° λ¬Έμžμ—΄κ³Ό 찾을 단어λ₯Ό μž…λ ₯받은 ν›„, strstr ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ— 단어가 ν¬ν•¨λ˜μ–΄ μžˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€. μ‚¬μš©μžκ°€ μž…λ ₯ν•˜λŠ” λ¬Έμžμ—΄μ΄ text에 μ €μž₯되고, 찾을 단어λ₯Ό word에 μ €μž₯ν•©λ‹ˆλ‹€.

fgets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ μž…λ ₯받을 λ•Œ, κ°œν–‰ 문자(\n)λ₯Ό ν¬ν•¨ν•˜μ—¬ μ½μ–΄μ˜€κΈ° λ•Œλ¬Έμ—, κ°œν–‰ 문자λ₯Ό μ œκ±°ν•˜κ³  싢은 κ²½μš°μ—λŠ” text[strlen(text) - 1]에 \0λ₯Ό ν• λ‹Ήν•΄ κ°œν–‰ 문자λ₯Ό μ‚­μ œν•©λ‹ˆλ‹€.

그리고, strstr ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ text λ¬Έμžμ—΄μ—μ„œ word 단어λ₯Ό μ°ΎμŠ΅λ‹ˆλ‹€. κ²°κ³Ό κ°’μœΌλ‘œ λ°˜ν™˜λœ 포인터 resultκ°€ NULL이 μ•„λ‹Œ 경우, 단어λ₯Ό μ°Ύμ•˜λ‹€λŠ” λ©”μ‹œμ§€λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.

μ‹€ν–‰ κ²°κ³ΌλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

λ¬Έμžμ—΄μ„ μž…λ ₯ν•˜μ„Έμš”: This is a sample text
찾을 단어λ₯Ό μž…λ ₯ν•˜μ„Έμš”: sample
단어λ₯Ό 찾음!

μœ„ μ˜ˆμ œμ—μ„œλŠ” "This is a sample text"λΌλŠ” λ¬Έμžμ—΄μ—μ„œ "sample"μ΄λΌλŠ” 단어λ₯Ό μ°Ύμ•˜μœΌλ―€λ‘œ "단어λ₯Ό 찾음!"μ΄λΌλŠ” λ©”μ‹œμ§€κ°€ 좜λ ₯λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

이와 같이 strstr ν•¨μˆ˜λ₯Ό ν™œμš©ν•˜μ—¬ λ¬Έμžμ—΄ μ°ΎκΈ°/검색을 μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. strstr ν•¨μˆ˜λŠ” λ¬Έμžμ—΄μ˜ μœ„μΉ˜λ₯Ό μ°ΎλŠ” κΈ°λŠ₯을 μ œκ³΅ν•˜κΈ° λ•Œλ¬Έμ—, 더 λ³΅μž‘ν•œ λ¬Έμžμ—΄ 처리 μž‘μ—…μ—λ„ ν™œμš©λ  수 μžˆμŠ΅λ‹ˆλ‹€.

4. λ¬Έμžμ—΄ μΉ˜ν™˜μ˜ μ˜λ―Έμ™€ ν•„μš”μ„±

λ¬Έμžμ—΄ μΉ˜ν™˜μ€ 주어진 λ¬Έμžμ—΄μ—μ„œ νŠΉμ • 문자 λ˜λŠ” λ¬Έμžμ—΄μ„ λ‹€λ₯Έ 문자 λ˜λŠ” λ¬Έμžμ—΄λ‘œ λŒ€μ²΄ν•˜λŠ” μž‘μ—…μ„ μ˜λ―Έν•©λ‹ˆλ‹€. 이 κΈ°λŠ₯은 전체적인 λ¬Έμžμ—΄ 처리λ₯Ό μˆ˜ν–‰ν•˜λŠ” 데 μžˆμ–΄ ν•„μš”ν•œ μž‘μ—…μœΌλ‘œ, λ‹€μ–‘ν•œ μƒν™©μ—μ„œ ν™œμš©λ  수 μžˆμŠ΅λ‹ˆλ‹€.

4.1 λ¬Έμžμ—΄ μΉ˜ν™˜μ˜ 의미

λ¬Έμžμ—΄ μΉ˜ν™˜μ€ 주어진 λ¬Έμžμ—΄μ—μ„œ νŠΉμ • 문자 λ˜λŠ” λ¬Έμžμ—΄μ„ μ°Ύμ•„μ„œ λ‹€λ₯Έ 문자 λ˜λŠ” λ¬Έμžμ—΄λ‘œ λŒ€μ²΄ν•˜λŠ” μž‘μ—…μ„ μ˜λ―Έν•©λ‹ˆλ‹€. 이 과정은 μ—¬λŸ¬ 가지 μš©λ„λ‘œ ν™œμš©λ  수 μžˆμŠ΅λ‹ˆλ‹€. λͺ‡ 가지 μ˜ˆμ‹œλ₯Ό μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

  • μ‚¬μš©μžλ‘œλΆ€ν„° μž…λ ₯받은 λ¬Έμžμ—΄μ—μ„œ νŠΉμ • 단어λ₯Ό λ‹€λ₯Έ λ‹¨μ–΄λ‘œ λ³€κ²½ν•˜λŠ” 경우
  • νŒŒμΌμ—μ„œ νŠΉμ • λ¬Έμžμ—΄μ„ μ°Ύμ•„μ„œ λ‹€λ₯Έ λ¬Έμžμ—΄λ‘œ λŒ€μ²΄ν•˜λŠ” 경우
  • λ¬Έμžμ—΄ 처리 μž‘μ—… μ‹œ νŠΉμ • λ¬Έμžμ—΄μ˜ ν˜•μ‹μ„ λ‹€λ₯Έ ν˜•μ‹μœΌλ‘œ λ³€ν™˜ν•˜λŠ” 경우

λ¬Έμžμ—΄ μΉ˜ν™˜μ€ λ¬Έμžμ—΄ 처리의 μΌλΆ€λ‘œ λ‹€μ–‘ν•œ μž‘μ—…μ— ν™œμš©λ˜λ©°, νŠΉμ • λ¬Έμžμ—΄μ„ λ³€κ²½ν•  λ•Œ μœ μš©ν•©λ‹ˆλ‹€.

4.2 λ¬Έμžμ—΄ μΉ˜ν™˜μ˜ ν•„μš”μ„±

λ¬Έμžμ—΄ μΉ˜ν™˜μ€ λ‹€μ–‘ν•œ μƒν™©μ—μ„œ ν•„μš”ν•œ μž‘μ—…μœΌλ‘œ, λ‹€μŒκ³Ό 같은 λͺ‡ 가지 이유둜 인해 ν•„μš”μ„±μ΄ μžˆμŠ΅λ‹ˆλ‹€.

  1. 데이터 μ •μ œ: μ‚¬μš©μžλ‘œλΆ€ν„° μž…λ ₯ 받은 λ¬Έμžμ—΄μ„ μ²˜λ¦¬ν•  λ•Œ, μž…λ ₯ 값에 ν¬ν•¨λœ νŠΉμ • 단어 λ˜λŠ” 문자λ₯Ό λ³€κ²½ν•΄μ•Ό ν•  κ²½μš°κ°€ μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μ‚¬μš©μžμ—κ²Œ 받은 μ΄λ¦„μ—μ„œ "μ„±"을 μ œκ±°ν•˜κ±°λ‚˜, νŠΉμ • 단어λ₯Ό λ‹€λ₯Έ λ‹¨μ–΄λ‘œ λŒ€μ²΄ν•΄μ•Ό ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  2. 데이터 가곡: νŒŒμΌμ΄λ‚˜ λ°μ΄ν„°λ² μ΄μŠ€μ™€ 같은 μ™ΈλΆ€ μ†ŒμŠ€μ—μ„œ 데이터λ₯Ό κ°€μ Έμ˜¬ λ•Œ, 원본 데이터에 ν¬ν•¨λœ νŠΉμ • λ¬Έμžμ—΄μ„ λŒ€μ²΄ν•΄μ„œ μ‚¬μš©ν•΄μ•Ό ν•  κ²½μš°κ°€ μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μ›Ή 크둀링을 톡해 κ°€μ Έμ˜¨ HTML λ¬Έμ„œμ—μ„œ νŠΉμ • νƒœκ·Έλ₯Ό μ‚­μ œν•˜κ±°λ‚˜ λ‹€λ₯Έ νƒœκ·Έλ‘œ λŒ€μ²΄ν•΄μ•Ό ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  3. λ¬Έμžμ—΄ ν˜•μ‹ λ³€ν™˜: λ¬Έμžμ—΄ 처리 μž‘μ—…μ—μ„œ νŠΉμ • λ¬Έμžμ—΄μ˜ ν˜•μ‹μ„ λ‹€λ₯Έ ν˜•μ‹μœΌλ‘œ λ³€ν™˜ν•΄μ•Ό ν•  κ²½μš°κ°€ μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, λ‚ μ§œ ν˜•μ‹μ„ λ³€ν™˜ν•˜κ±°λ‚˜, 숫자λ₯Ό λ‹€λ₯Έ ν˜•μ‹μœΌλ‘œ ν‘œν˜„ν•΄μ•Ό ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

이처럼 λ¬Έμžμ—΄ μΉ˜ν™˜μ€ 데이터 μ²˜λ¦¬μ™€ λ³€ν™˜μ— ν•„μš”ν•œ μž‘μ—…μœΌλ‘œ, λ³΅μž‘ν•œ μž‘μ—…μ—μ„œ ν•„μš”ν•œ κ²½μš°κ°€ μžˆμŠ΅λ‹ˆλ‹€. C μ–Έμ–΄μ—μ„œλŠ” λ¬Έμžμ—΄ 처리λ₯Ό μœ„ν•œ λ‹€μ–‘ν•œ ν•¨μˆ˜λ₯Ό μ œκ³΅ν•˜κ³  μžˆμ–΄, λ¬Έμžμ—΄ μΉ˜ν™˜ μž‘μ—…μ„ κ°„λ‹¨ν•˜κ²Œ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

5. strstr ν•¨μˆ˜λ₯Ό ν™œμš©ν•œ λ¬Έμžμ—΄ μΉ˜ν™˜ 예제

strstr ν•¨μˆ˜λ₯Ό ν™œμš©ν•˜μ—¬ λ¬Έμžμ—΄ μΉ˜ν™˜μ„ μˆ˜ν–‰ν•˜λŠ” μ˜ˆμ œμ— λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. μ•„λž˜ μ˜ˆμ œλŠ” μ‚¬μš©μžλ‘œλΆ€ν„° μž…λ ₯받은 λ¬Έμžμ—΄μ—μ„œ νŠΉμ • 단어λ₯Ό μ°Ύμ•„μ„œ λ‹€λ₯Έ λ‹¨μ–΄λ‘œ λ³€κ²½ν•˜λŠ” ν”„λ‘œκ·Έλž¨μž…λ‹ˆλ‹€.

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

int main() {
    char text[100];
    char word[20];
    char replace[20];

    printf("λ¬Έμžμ—΄μ„ μž…λ ₯ν•˜μ„Έμš”: ");
    fgets(text, sizeof(text), stdin);

    printf("찾을 단어λ₯Ό μž…λ ₯ν•˜μ„Έμš”: ");
    scanf("%s", word);

    printf("λŒ€μ²΄ν•  단어λ₯Ό μž…λ ₯ν•˜μ„Έμš”: ");
    scanf("%s", replace);

    // κ°œν–‰ 문자 제거
    text[strlen(text) - 1] = '\0';

    // 단어 μ°ΎκΈ°
    char* result = strstr(text, word);

    if (result != NULL) {
        // 단어 μΉ˜ν™˜
        strcpy(result, replace);
        printf("μΉ˜ν™˜ κ²°κ³Ό: %s\n", text);
    } else {
        printf("단어λ₯Ό 찾을 수 μ—†μŒ\n");
    }

    return 0;
}

μœ„ μ˜ˆμ œλŠ” μ‚¬μš©μžλ‘œλΆ€ν„° λ¬Έμžμ—΄, 찾을 단어, λŒ€μ²΄ν•  단어λ₯Ό μž…λ ₯받은 ν›„, strstr ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ—μ„œ 단어λ₯Ό μ°ΎμŠ΅λ‹ˆλ‹€. μ‚¬μš©μžκ°€ μž…λ ₯ν•œ λ¬Έμžμ—΄μ΄ text에 μ €μž₯되고, 찾을 단어λ₯Ό word에, λŒ€μ²΄ν•  단어λ₯Ό replace에 μ €μž₯ν•©λ‹ˆλ‹€.

fgets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ μž…λ ₯받을 λ•Œ, κ°œν–‰ 문자(\n)λ₯Ό ν¬ν•¨ν•˜μ—¬ μ½μ–΄μ˜€κΈ° λ•Œλ¬Έμ—, κ°œν–‰ 문자λ₯Ό μ œκ±°ν•˜κ³  싢은 κ²½μš°μ—λŠ” text[strlen(text) - 1]에 \0λ₯Ό ν• λ‹Ήν•΄ κ°œν–‰ 문자λ₯Ό μ‚­μ œν•©λ‹ˆλ‹€.

그리고 strstr ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ text λ¬Έμžμ—΄μ—μ„œ word 단어λ₯Ό μ°ΎμŠ΅λ‹ˆλ‹€. κ²°κ³Ό κ°’μœΌλ‘œ λ°˜ν™˜λœ 포인터 resultκ°€ NULL이 μ•„λ‹Œ 경우, 단어λ₯Ό μ°Ύμ•˜λ‹€λŠ” 의미둜 단어λ₯Ό λ‹€λ₯Έ λ‹¨μ–΄λ‘œ λŒ€μ²΄ν•©λ‹ˆλ‹€. 이λ₯Ό μœ„ν•΄ strcpy ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ result μœ„μΉ˜λΆ€ν„° λŒ€μ²΄ν•  λ‹¨μ–΄λ‘œ λ¬Έμžμ—΄μ„ λ³΅μ‚¬ν•©λ‹ˆλ‹€.

λ§ˆμ§€λ§‰μœΌλ‘œ κ²°κ³Ό λ¬Έμžμ—΄μ„ 좜λ ₯ν•©λ‹ˆλ‹€.

μ‹€ν–‰ κ²°κ³ΌλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

λ¬Έμžμ—΄μ„ μž…λ ₯ν•˜μ„Έμš”: This is a sample text
찾을 단어λ₯Ό μž…λ ₯ν•˜μ„Έμš”: sample
λŒ€μ²΄ν•  단어λ₯Ό μž…λ ₯ν•˜μ„Έμš”: example
μΉ˜ν™˜ κ²°κ³Ό: This is a example text

μœ„ μ˜ˆμ œμ—μ„œλŠ” "This is a sample text"λΌλŠ” λ¬Έμžμ—΄μ—μ„œ "sample"μ΄λΌλŠ” 단어λ₯Ό μ°Ύμ•„μ„œ "example"둜 μΉ˜ν™˜ν•˜μ˜€μœΌλ―€λ‘œ, "μΉ˜ν™˜ κ²°κ³Ό: This is a example text"λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.

이와 같이 strstr ν•¨μˆ˜λ₯Ό ν™œμš©ν•˜μ—¬ λ¬Έμžμ—΄ μΉ˜ν™˜μ„ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ¬Έμžμ—΄ μΉ˜ν™˜μ€ C μ–Έμ–΄μ—μ„œ 자주 μ‚¬μš©λ˜λŠ” κΈ°λŠ₯으둜, λ‹€μ–‘ν•œ μƒν™©μ—μ„œ μœ μš©ν•˜κ²Œ ν™œμš©λ  수 μžˆμŠ΅λ‹ˆλ‹€.

λŒ“κΈ€