바람이 머문 언덕
c문자열 함수 흉내 내기 => 문자열 제거 본문
반응형
문자열 제거 함수를 흉내 내어 보았습니다.
프로그램을 하다가 보면은 문자열을 가지고 하는 작업이 많죠.
문자열 관련 함수를 이미 만들어 진 것을 사용 해도 되지만 간단한 것은 직접 만들면서 c 제어문의 사용 법에 익숙해지는 것도 좋은 방법 중 하나라고 생각 합니다.
#include <iostream> 출력 예제로 입출력은 c++의 i/o 스트림을 이용 했습니다.
int delchar(char *buf, char *a); // 문자열 buf에서 문자열 a를 모두 제거
int delSchar(char *buf, char *a); // 문자열 buf에서 제일 처음에 나타나는 문자열 a를 제거
int delEchar(char *buf, char *a); // 문자열 buf에서 제일 마지막에 나타나는 문자열 a를 제거
using namespace std;
int main(int argc, _TCHAR* argv[])
{ ;
char buf[25]="124abcd123absdf123", a[20]="12";
cout<<buf<< '\n';
delEchar(buf, a);
cout<<buf<< '\n';
system("PAUSE"); // 프로그램을 바로 종료하지 않고 키 입력을 기다린다.
return 0;
}
// 뒤에서 부터 문자열을 찾아서 제거하는 함수
int delEchar(char *buf, char *a)
{
int ik = strlen(buf), ib=strlen(a);
if(ib>0 && ik>=ib) // 삭제할여는 문자가 있어면
{
ib--; ik--; // 문자열의 배열의 끝 기억 (c에서 배열은 0부터 시작)
int n, i=ik;
while(i>=0)
{
if(buf[i]==a[ib]) // 문자열 buf에서 문자열 a의 마지막 문자를 찾으면
{
for(n=ib; buf[i] == a[n]; n--)
{
if(n == 0) // 같은 문자를 찾으면
{
for(; buf[i+ib] !='\0'; i++) // buf에서 문자 삭제
{
buf[i] = buf[i+ib+1];
}
buf[ik-ib]='\0';
return 1;
}
i--;
}
continue;
}
i--;
}
}
return 0;
}
// 앞에서 부터 문자를 찾아서 제일 처음에 나오는 문자열 삭제
int delSchar(char *buf, char *a)
{
int n=0, k=0;
for(int i=0; buf[i]!='\0'; i++)
{
if(buf[i]==a[n])
{
k = i;
while(buf[i]==a[n])
{
if(a[++n]=='\0')
{
for(k; buf[k+n]!='\0'; k++)
{
buf[k] = buf[k+n];
}
buf[k]='\0';
return 1;
}
i++;
}
n=0;
i--;
}
}
return 0;
}
// 같은 문자열 모두 삭제
int delchar(char *buf, char *a)
{
int n=0, k=0, s = 0;
for(int i=0; buf[i]!='\0'; i++)
{
if(buf[i]==a[n])
{
k = i;
while(buf[i]==a[n])
{
if(a[++n]=='\0')
{
for(k; buf[k+n]!='\0'; k++)
{
s=1;
buf[k] = buf[k+n];
}
buf[k]='\0';
break;
}
i++;
}
n=0;
i--;
}
}
return s;
}
프로그램을 하다가 보면은 문자열을 가지고 하는 작업이 많죠.
문자열 관련 함수를 이미 만들어 진 것을 사용 해도 되지만 간단한 것은 직접 만들면서 c 제어문의 사용 법에 익숙해지는 것도 좋은 방법 중 하나라고 생각 합니다.
#include <iostream> 출력 예제로 입출력은 c++의 i/o 스트림을 이용 했습니다.
int delchar(char *buf, char *a); // 문자열 buf에서 문자열 a를 모두 제거
int delSchar(char *buf, char *a); // 문자열 buf에서 제일 처음에 나타나는 문자열 a를 제거
int delEchar(char *buf, char *a); // 문자열 buf에서 제일 마지막에 나타나는 문자열 a를 제거
using namespace std;
int main(int argc, _TCHAR* argv[])
{ ;
char buf[25]="124abcd123absdf123", a[20]="12";
cout<<buf<< '\n';
delEchar(buf, a);
cout<<buf<< '\n';
system("PAUSE"); // 프로그램을 바로 종료하지 않고 키 입력을 기다린다.
return 0;
}
// 뒤에서 부터 문자열을 찾아서 제거하는 함수
int delEchar(char *buf, char *a)
{
int ik = strlen(buf), ib=strlen(a);
if(ib>0 && ik>=ib) // 삭제할여는 문자가 있어면
{
ib--; ik--; // 문자열의 배열의 끝 기억 (c에서 배열은 0부터 시작)
int n, i=ik;
while(i>=0)
{
if(buf[i]==a[ib]) // 문자열 buf에서 문자열 a의 마지막 문자를 찾으면
{
for(n=ib; buf[i] == a[n]; n--)
{
if(n == 0) // 같은 문자를 찾으면
{
for(; buf[i+ib] !='\0'; i++) // buf에서 문자 삭제
{
buf[i] = buf[i+ib+1];
}
buf[ik-ib]='\0';
return 1;
}
i--;
}
continue;
}
i--;
}
}
return 0;
}
// 앞에서 부터 문자를 찾아서 제일 처음에 나오는 문자열 삭제
int delSchar(char *buf, char *a)
{
int n=0, k=0;
for(int i=0; buf[i]!='\0'; i++)
{
if(buf[i]==a[n])
{
k = i;
while(buf[i]==a[n])
{
if(a[++n]=='\0')
{
for(k; buf[k+n]!='\0'; k++)
{
buf[k] = buf[k+n];
}
buf[k]='\0';
return 1;
}
i++;
}
n=0;
i--;
}
}
return 0;
}
// 같은 문자열 모두 삭제
int delchar(char *buf, char *a)
{
int n=0, k=0, s = 0;
for(int i=0; buf[i]!='\0'; i++)
{
if(buf[i]==a[n])
{
k = i;
while(buf[i]==a[n])
{
if(a[++n]=='\0')
{
for(k; buf[k+n]!='\0'; k++)
{
s=1;
buf[k] = buf[k+n];
}
buf[k]='\0';
break;
}
i++;
}
n=0;
i--;
}
}
return s;
}
반응형