Written on
·
92
1
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
아래와 같이 strcmp 함수를 구현하였습니다.
혹시 가능하다면 비효율적인 부분이 있다면 알려주실 수 있으실까요?
Answer 2
1
안녕하세요? 질문&답변 도우미 Soobak 입니다.
우선, 교수님께서 권장드린 연습문제를 스스로 꼼꼼히 풀이하려 노력하신 점이 인상깊네요.
전반적으로 잘 구현하셨습니다.
하지만, 조금 아쉽게도 구현하신 내용은 실제 strcmp()
함수의 기능과는 다른 부분들이 있습니다.
우선, 첨부해주신 코드에서는 '두 문자열의 길이가 같을 때' 만 문자별 비교를 수행합니다
이로 인하여 '길이가 다른 문자열' 에 대해서는 올바른 비교 결과를 제공하지 못하게 됩니다.
두 번째로, 함수의 반환형이 void
로 아무것도 반환하지 않으며, 단순히 결과 값을 출력하고 있습니다.
이 부분이 의도하신 것이라면 잘 구현하신 것이지만,
실제 strcmp()
의 구현은 해당 강의 중 교수님께서 if()
조건문의 == 0
과의 비교 에 대하여 강조하여 설명해주신 부분을 떠올려보시면 반환형이 void
가 아님을 이해하실 수 있을 것 같습니다.
세 번째로, 예외 처리에 대해서 잘 이루어지지 않았습니다.
예를 들어, 인수로 전달되어온 문자열이 NULL
인 경우 등에서 예외 처리를 해주시면 좋을 것 같습니다.
이에 대한 내용은 추후 예외 처리와 관련된 학습을 진행하시면서 이 연습문제를 떠올려보시면 좋을 것 같아 조심스레 첨언드려봅니다.
또한, 변수 diff
는 선언이 되었지만 사용되고 있지 않습니다.
마지막으로, '효율성' 측면에서 길이를 비교하는 두 개의 별도 반복문이 있어 비효율적일 수 있습니다.
전체 함수에서 하나의 반복문으로도 충분히 strcmp()
함수를 구현하실 수 있으니, 여유가 되실 때 한 번 고민해보시면 도움이 되실 것 같습니다.
strcmp()
함수에 대한 표준 사항이 안내되어있는 링크를 첨부드립니다.
https://en.cppreference.com/w/c/string/byte/strcmp
학습에 도움이 되어드리고자 최선을 다해 꼼꼼히 읽어보고 설명을 드려보았습니다.
충분히 잘 구현하셨고, 노력하신 점이 멋있으십니다.
0
안녕하세요, 인프런 AI 인턴입니다.
딴지님의 질문과 유사한 주제로 이전에 다른 학습자들이 한 질문들 사이에서 strcmp
함수를 스스로 구현하는 방법에 대한 질문을 찾아볼 수 있었습니다. 참고가 될만한 내용을 아래에서 소개해드리겠습니다.
strcmp, strcat을 스스로 구현해보기: 이 게시물에서는 하나의 질문에서 strcmp
과 strcat
함수를 구현하는 다양한 방법을 탐구하고 있습니다. 특히, strcmp
함수 구현 파트에서는 두 문자열의 길이가 다를 경우와 같을 경우에 대해 각각 다른 로직으로 접근하고 있으며, 문자열 길이를 비교하는 myStrlen
함수를 먼저 작성하여 활용한 점이 주목할 만합니다.
이 예시의 구현에는 문자열의 길이 비교 후, 각 문자를 순차적으로 비교하는 접근법이 사용되었습니다. 구현된 로직에서 길이가 다를 경우 -1을 반환하고, 길이가 같을 경우 각 문자를 비교하여 모든 문자가 동일할 때 0을 반환하는 방식으로 구현하였습니다.
딴지님께서 공유해주신 코드와 유사한 로직을 따르고 있으나, 여기서의 구현은 “길이가 다르면 바로 반환”이라는 초기 체크 로직을 포함하고 있어 비효율적인 부분을 효과적으로 줄일 수 있습니다. 또한, 코드상에서는 두 문자열의 길이가 동일한 경우에만 문자 단위로 비교를 진행하기에, 이로 인한 비효율을 줄이는 면에서도 인사이트를 얻을 수 있을 것으로 보입니다.
진행하신 구현에서 비효율적인 부분을 개선하고자 한다면, 길이 비교를 통해 초기에 다를 경우에 대한 처리를 추가함으로써 조건 분기를 최소화하는 방법을 고려할 수 있습니다. 더불어, 각 문자를 비교하는 과정에서 발견된 첫 번째 차이점에서 바로 결과를 반환하도록 로직을 구성하는 것이 불필요한 반복을 줄이는 데 도움이 될 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.