소프트웨어 C언어 고수님들.. 도와주세요..
2014.04.24 01:12
안녕하세요.
C언어 배우고 있는데, 과제물이 너무 어렵네요..
포인터를 써야 할 것 같은데,
bad를 good 로 고치면 되는데, 문제는 글자 길이가 달라서 추가적으로 함수를 더 써야되는 건지요?
소스를 어떻게 짜면 될까요?
도와주시면 감사하겠습니다.
(문제가 된다면 게시물 삭제하겠습니다.)
------------------------------------------------------------
문자열에서 특정 문자열을 변환하기
– C언어는 문자열을 변환하기 위한 특별한 함수를 제공하지 않습니다.
– 따라서, 입력 받은 문자열 중에서 특정 문자열을 변환하는 함수를 작성합니다.
– 소스코드 작성 조건(함수 이름) 변환문자열 함수 원형은 다음과 같이 한다.
-> void ReplaceStr(char *string, char *oldstr, char *newstr);
다음 [실행결과 예]와 같은 프로그램을 작성하시오
입력 문자열 ? I am a bad student (엔터)
변환하고자 하는 문자열 ? bad (엔터)
변환될 문자열? good (엔터)
입력 문자열을 다음과 같이 변환하였습니다.
I am a good student
------------------------------------------------------------
댓글 [6]
-
초리 2014.04.24 05:21
-
푸른하늘좋아 2014.04.24 09:26
앗! 감사합니다.
나이 들어서 직장 야근 + 가정을 이끌며 공부하기가 힘드네요..
요즘 계속 이것 붙잡느라 새벽에야 잠들었습니다.
오늘 퇴근하자 마자 집에가서 올려주신 소스 분석하며,
제 것으로 만들겠습니다.
감사합니다!
C언어에서 포인터가 정말 중요하다는데, 이해하기가 어렵네요.
강사 말로는 포인터 공부하다 포기하는 사람이 많고,
프로그래머 중에서도 잘 몰라서 Copy&Paste 하는 사람도 종종 있다고 그러네요..
아무튼 열심히 공부하겠습니다.
-
초리 2014.04.24 11:07
앗! 혹시 재귀호출법을 안배웠다면
return ReplaceStr(srcstr, oldstr, newstr); <== 삭제해주세요
그래도 원하는 답은 나올거예요.
-
푸른하늘좋아 2014.04.24 11:13
그런가요?
그 줄 삭제해도 되나보지요?
감사합니다. ^^
-
qkqh 2014.04.24 11:44
char* ch 값 넣는 부분 빼먹으신 것 같네요. 나중에 작성하려고 빈 줄 하나 넣으신 것 같은데...
ch = srcstr + strlen(srcstr); 라고 하면 될 것 같은데 정확하진 않아요
-
푸른하늘좋아 2014.04.24 19:06
세세한 부분까지 챙겨주셔서
감사합니다.
넣어서 해 보겠습니다.^^
쩝~ 다른 작업하든중에 들어와보니 문제가 있네요
문제를 보니 풀고 싶고 내가 풀어서는 안되는데 쩝~
열공하세요
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void ReplaceStr(char *srcstr, char *oldstr, char *newstr)
{
char buffer[1000];
char *ch;
strncpy(buffer, srcstr, ch-srcstr);
buffer[ch-srcstr] = 0;
sprintf(buffer+(ch - srcstr), "%s%s", newstr, ch + strlen(oldstr));
srcstr[0] = 0;
strcpy(srcstr, buffer);
return ReplaceStr(srcstr, oldstr, newstr);
}
int main(void)
{
char src[100];
char old[100];
char newstr[100];
printf("입력문자열 ? ");
gets(src);
printf("\n");
printf("변환하고자 하는 문자열 ? ");
gets(old);
printf("\n");
printf("변한될 문자열 ? ");
gets(newstr);
printf("\n");
ReplaceStr(src, old, newstr);
printf("\n\n입력 문자열을 다음과 같이 변환하였습니다\n%s\n------------------------------------------------------------\n", src);
return 0;
}