C언어 과제 문자열에서 찾는 문자열의 이전 문자들을 리턴

조회수 399회
char *str_chr(char *s, int c){
  int i = 0;
  while(s[i]){
    if(s[i] != c){
      return &s[i];
    }
    i++;
  }
  return NULL;
}

int main(){
  char str[100];
  char ch[10];
  char *p;

  scanf("%s %s", str, ch);

  if((p = str_chr(str, ch[0])) == NULL)
    printf("NO");
  else
    printf("이전문자는 %s 입니다.", p);

  return 0;
}

이런 식으로 계속 도전해 보고 있기는 한데 str_chr 사용자 정의 함수로 입력 받은 문자열에서 찾는 문자열의 이전 문자들을 리턴시키려고 계속 해보는데 도저히 결론에 도달하기가 힘듦니다. 어떻게 코드를 손봐야할지 조언좀 해주실수 있을까요?

하필 조건중에 저기 if, else 문을 꼭 사용하라고 하더라구요. 저 조건때문에 너무 어렵습니다.

  • "결론에 도달"이 무슨 의미인지 모르겠군요. 기대한 대로 동작은 하는지요? 엽토군 2021.11.29 08:23
  • 문제가 뭔가요 strchr 함수를 직접 짜보는건가요. 김호원 2021.11.29 09:19
  • 솔직히 제대로 작동도 안하더라구요 기존에 나와있는 str_chr를 썼을때 계속 string i 를 입력하면 ing 만 계속 출력이 되는데 저는 i 이전 문자인 stri 만 출력되도록 하려는데 그게 잘 안됩니다 IBNhyeoli 2021.11.29 12:06

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    의도하는 것이 찾는 문자보다 이전에 있는 문자열을 얻는 것이라면 아래와 같이 하면 가능합니다.

    "이전" 문자열이라고 하면 원래 문자열의 "처음부터 현재 위치 까지"를 의미하는데, 현재 위치에서 끊기 위해서는 널 문자('/0')를 넣어줘야 합니다.

    C언어에서는 문자열의 끝을 이 널문자로 판단하기 때문이에요.

    #include <stdio.h>
    
    char *str_chr(char *s, char c){
      int i = 0;
      while(s[i]){
        if(s[i] == c){
          s[i] = '\0';
          return &s[0];
        }
        i++;
      }
      return NULL;
    }
    int main(){
      char str[100] = "sample sting";
      char ch = 'e';
      char *p;
    
      if((p = str_chr(str, ch)) == NULL)
        printf("NO");
      else
        printf("이전문자는 %s 입니다.", p);
        return 0;
    }
    
    
    • (•́ ✖ •̀)
      알 수 없는 사용자

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

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

(ಠ_ಠ)
(ಠ‿ಠ)