C언어에서의 replace
글쓴이: luciell / 작성시간: 화, 2010/01/12 - 3:19오후
요즘 한창 C언어의 재미를 붙인 학생입니다.
문뜩 생각이 나, C언어에서의 replace함수를 구현해보았습니다.
1. 치환한 갯수를 return 해준다.
2. char_replace , str_replace 를 구분하여준다.
- int char_replace(char *str, const char *word, const char *replace_word)
- int str_replace(char *str, const char *words, const char *replace_words)
3. char_replace 는 strchr을 이용하여 쉽게 처리하였습니다.
for(cnt=0; p = strchr(str,word) ; ) { if ((char)str[p-str] == word) { str[p-str] = replace_word; cnt++; } }
4. str_replace 는strtok 를 이용하여 lengh 값이 words >= replace_words 일때는 쉽게 처리가 됩니다.
for(cnt=0; strstr(buf,word) != NULL ; { token = strtok(buf,word); while(token != NULL) { strcat(tmp,token); token = strtok(NULL,word); if (token != NULL) { strcat(tmp,replace_word); cnt++; } } } sprintf(str,"%s",tmp);
여기서 에로사항이 lengh 값이 words < replace_words 일때입니다.
이럴땐 malloc 나 strdup 를 이용을 꼭 하여야 가능할껏 같습니다.
그럴경우 그 값을 포인터를 리턴해줘야 하는건가요?(C에서는 문자열리턴이 불가능하다고 알고있습니다.)
여러 개발자 선배님들께선 C언어에서 replace를 어떻게 구현하셨는지 조언 부탁드립니다.
Forums:
추가적으로
한가지 더 질문드립니다.
main 에서 선언한 char str[200]; 선언한다음
함수로 로 호출하여 str 을
char *s 로 받습니다.
그럼 함수로 전해진 s 은 main char str[200]의 시작주소를 가르키는 포인터가 됩니다.
그러면..
함수로 전해진 str 포인터로 main 에 정의된 str배열의 크기를 알아올순 없는건가요? :(
네가 꿈을 꾸지 않는 한, 꿈은 절대 시작되지 않는단다.
언제나 출발은 바로 '여기'야 떄가 무르익으면, 그럴수 있는 조건이 갖춰지면,
하고 미루다 보면, 오느새 현실에 파묻혀 소망을 잃어버리지.
그러므로 무언가 '되기(be)' 위해서는 반드시 지금 이 순간 무언가를 '해야(do)'만 해
- Stuart Avery Gold 의 우화소설 Ping 중에서..
없는걸로
없는걸로 알고있습니다. 그게 있으면 참 편할텐데 말이죠
인자 하나줄어서 좋을텐데.....ㅎㅎ
흘러가고있는 지금 이 시간에 충실하자.
단일문자 교체 간단 버전
좋은 정보 감사합니다.
말씀해주신 것을 참조하여 단일 문자 교체를 수정해 보았습니다.
char* p;
while( p=strchr(src, word ))
{
*p = replace_word;
}
^^
void replace(char *str, char
이런방법도 있구나.......하고 알아주세요
우리 열심히 해보아요~
흘러가고있는 지금 이 시간에 충실하자.
strlen(str) < strlen(words)
strlen(str) < strlen(words) 라면???
--
Jun, Woong (woong at gmail.com)
--
Jun, Woong (woong at gmail.com)
http://www.woong.org
오호 그렇네요 지적
오호 그렇네요 지적 감사합니다 : )
흘러가고있는 지금 이 시간에 충실하자.
"그럴경우 그 값을
"그럴경우 그 값을 포인터를 리턴해줘야 하는건가요?(C에서는 문자열리턴이 불가능하다고 알고있습니다.)
"
잘못알고 계십니다. 됩니다. 또한 문자열 이란 스트링, 스트링은 C에서 포인터를 의미합니다. s붙은함수들이 대부분 문자열함수 입니다.
님이 구현하고 자하는것은 보기보다 매우 쉽게 구현됩니다.
C에서 주로 기본적인함수같은데 제공되지 않는것은 대부분 간단히 해결되기때문에 없는것이라고 보시면 맞을겁니다.
strstr 함수를사용하시면 더편하게 찾으시고. strcat,strncpy등 이용하면편하게 구현될겁니다.
미리 strstr로 치환될갯수가 나오고 최종size 를 알수 있으니까 for돌면서 버퍼에 순차적제시키면 간단히구현되겠죠??
댓글 달기