Language/C
C :: 문자열 치환(변환)VallistA2014. 6. 15. 18:14
0. 개요
c언어에서는 string.h 에서 문자열 관련한 많은 기능들을 제공합니다.
수많은 기능중에서 문자열을 입력해서, 그 대상 문자열중 자신이 바꾸겠다 하는 문자열을 다른 문자열로 치환하는 기능이 없습니다.
c가 아닌 c++에서의 string에도 이런 기능을 지원하지 않습니다.
string이 무엇일까? :: http://vallista.tistory.com/entry/string-문자열
기능이 존재하지 않으면, 그 기능을 만들어야겠죠?
이번에는 입력한 문자열을 자신이 원하는 문자열을 찾고, 원하는 문자열로 치환(변환) 시키는 함수를 만들어보겠습니다.
1. 문자열을 치환하는 소스 코드
char *replaceValue(char *strInput, const char *strTarget, const char *strChange) { char* strResult; char* strTemp; int i = 0; int nCount = 0; int nTargetLength = strlen(strTarget); if (nTargetLength < 1) return strInput; int nChangeLength = strlen(strChange); if (nChangeLength != nTargetLength) { for (i = 0; strInput[i] != '\0';) { if (memcmp(&strInput[i], strTarget, nTargetLength) == 0) { nCount++; i += nTargetLength; } else i++; } } else { i = strlen(strInput); } strResult = (char *) malloc(i + 1 + nCount * (nChangeLength - nTargetLength)); if (strResult == NULL) return NULL; strTemp = strResult; while (*strInput) { if (memcmp(strInput, strTarget, nTargetLength) == 0) { memcpy(strTemp, strChange, nChangeLength); strTemp += nChangeLength; strInput += nTargetLength; } else { *strTemp++ = *strInput++; } } *strTemp = '\0'; return strResult; }
위의 소스는 문자열을 치환하는 소스코드입니다.
내부는 따로 설명을 드리진 않겠습니다.
2. 사용법
자 이제 사용법에 대해서 알아 봅시다.
제일 상위단에는 stdio.h , string.h , stdlib.h 를 포함해주시면 되겠습니다.
#define STRMAX 256 //!< 배열의 최대값 int showResult(char * input); //!< 결과 보여주는 함수 char *replaceValue(char *strInput, const char *strTarget, const char *strChange); int main() { char strInput[STRMAX]; //!< 입력받을 변수 char strTarget[STRMAX]; //!< 변경할 이름 char strChange[STRMAX]; //!< 변경될 이름 char strResult[STRMAX]; //!< 변경한 값을 저장할 변수 memset(strInput , NULL , STRMAX); //!< 초기화 memset(strResult , NULL , STRMAX); //!< 초기화 printf("입력 받을 이름 : "); gets(strInput); printf("변경할 이름 : "); gets(strTarget); printf("변경될 이름 : "); gets(strChange); sprintf(strResult , "%s" , replaceValue(strInput, strTarget, strChange)); showResult(strResult); free(strResult); return 0; } int showResult(char * input) { if(input == NULL) return -1; printf("결과 : %s\n" , input); return 0; } char *replaceValue(char *strInput, const char *strTarget, const char *strChange) { char* strResult; char* strTemp; int i = 0; int nCount = 0; int nTargetLength = strlen(strTarget); if (nTargetLength < 1) return strInput; int nChangeLength = strlen(strChange); if (nChangeLength != nTargetLength) { for (i = 0; strInput[i] != '\0';) { if (memcmp(&strInput[i], strTarget, nTargetLength) == 0) { nCount++; i += nTargetLength; } else i++; } } else { i = strlen(strInput); } strResult = (char *) malloc(i + 1 + nCount * (nChangeLength - nTargetLength)); if (strResult == NULL) return NULL; strTemp = strResult; while (*strInput) { if (memcmp(strInput, strTarget, nTargetLength) == 0) { memcpy(strTemp, strChange, nChangeLength); strTemp += nChangeLength; strInput += nTargetLength; } else { *strTemp++ = *strInput++; } } *strTemp = '\0'; return strResult; }
사용법은 그렇게 어렵지 않습니다. 간단합니다.
char* 형으로 반환을 하는것만 유의해주시면 간단한 소스코드로 인식할 수 있습니다.
댓글
VallistA
병특이 끝나서 게임에서 웹으로 스위칭한 프로그래머.
프로그래밍 정보등을 공유합니다.
현재는 이 블로그를 운영하지 않습니다.
vallista.kr 로 와주시면 감사하겠습니다!
자고 싶습니다. ㅠㅠ
Github :: 링크
궁금한점 문의 주시면 답변드리도록 하겠습니다
VISITED
Today :
Total :
Lately Post
Lately Comment