[C언어] 문자열을 찾고 바꾸기에 관한 질문입니다.

조회수 432회
문자열 입력 : We have a book
찾을 문자 : book
바꿀 문자 : paper
We have a paper

이런 결과를 출력하는 c코드를 작성하고 싶은데

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

void ChangeStr(char *s, char *f, char *c)
{
    int i;

    for (i=0; s[i] != NULL; i++ )
    {
        if (s == f)//s와 f의 첫번째 index가 같다면
        {
            for (int j = 0; j < strlen(c); j++)
                s[i] = c[j];
        }
    }
    printf("%s", s);
}


int main()
{
    char str[30];
    char find[30];
    char change[30];

    printf("문자열 입력 : ");
    gets(str);

    printf("찾을 문자 : ");
    gets(find);

    printf("바꿀 문자 : ");
    gets(change);

    ChangeStr(str, find, change);

}

이것은 제가 짠 코드입니다. 출력 했을 때 book이 paper로 바뀌지 않아서요.. 뭐가 문제일까요ㅠㅠ

  • (•́ ✖ •̀)
    알 수 없는 사용자

2 답변

  • 아래 코드 참고하세요.

    #include <stdio.h>
    #include <string.h>
    
    void ChangeStr(char* s, char* f, char* c)
    {
        int i;
    
        for (i = 0; s[i] != NULL; i++)
        {
            if (strncmp(&s[i], f, strlen(f)) == 0) // s[i]부터 strlen(f) 글자가 f와 같다면
            {
                for (size_t j = 0; j < strlen(c); j++)
                    s[i + j] = c[j];
    
                s[i + strlen(f) + 1] = '\0';
            }
        }
        printf("%s", s);
    }
    
    
    int main()
    {
        char str[30];
        char find[30];
        char change[30];
    
        printf("문자열 입력 : ");
        gets_s(str, 30);
    
        printf("찾을 문자 : ");
        gets_s(find, 30);
    
        printf("바꿀 문자 : ");
        gets_s(change, 30);
    
        ChangeStr(str, find, change);
    
    }
    

    결과

    이미지

    위 코드는 질문자 분께서 작성하신 코드를 기초로 작성해 본건데요. 좀더 활용성을 높이실려면 아래처럼 하는게 더 좋을거 같아요.

    #include <stdio.h>
    #include <string.h>
    
    int main()
    {
        char str[80], find[80], change[80], temp[80];
        char* p;
    
        printf("문자열 입력: ");
        gets_s(str, 80);
    
        printf("찾을 문자: ");
        gets_s(find, 80);
    
        printf("바꿀 문자: ");
        gets_s(change, 80);
    
        p = strstr(str, find);
    
        if (p != NULL)
        {
            str[p - str] = '\0';
            strcpy_s(temp, 80, p + strlen(find));
    
            strcat_s(str, 80, change);
            strcat_s(str, 80, temp);
    
            printf("%s", str);
        }
    
        return 0;
    }
    

    결과

    이미지

    • (•́ ✖ •̀)
      알 수 없는 사용자
  • s, f 모두 포인터, 즉 주소값이에요. 비교해야 할 것은 주소값이 아닌 그 주소값에 할당된 문자열입니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)