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

