Programming Language/C2010. 10. 14. 19:32

revsqueeze.c

문자열에서 주어진 문자를 제거하고 역순화 시키는 소스를 구현합니다.

 /*

  -실습) reversqueeze.
  주어진 문자열(str)에서 주어진 문자 (c)를 제거하고 압축한 후에 역순화 시킨 문자열을
  만들어 주는 함수 revsqueeze(str,c)를 만드시오.
  =main에서
  -입력은getchar() 사용할것.
  -call은
  result = revsqueeze(str,c);
  -출력은 printf("%s\n" , result);
  =function에서
  -malloc 사용해서 결과 문자열을 생성시킬 것.
  -반드시 포인터 사용할것.
  
*/

#include<stdio.h>

#include<stdlib.h>  //malloc
#include<string.h>  //strlen

#define MAX 100

char* Revsq(char* pstr,char c);


int main(void){
 
 char str[MAX];   // 문자열이 입력될 배열.
 char s;     // getchar로 받을 변수.
 char c;     // 제거하기 원하는 문자.
 int cnt = 0;   // => 배열의 인덱스.
 
 char* result;
 
 puts("문자열을 쓰고 제거할 문자를 입력하시오.(띄어쓰기)");
 
 
 while((s = getchar()) != '\n')
 {
  if(s == ' '){      // 제거할 문자 입력하는 부분.
   s = getchar();     //띄어쓰기 후에 입력한 값을 c에저장.
   c=s;
  }
  else 
   str[cnt] = s;
  cnt++;
  
 }
 
 
 str[--cnt] = '\0';      //☆★마지막 NULL입력.☆★
// printf("str = %s c = %c\n",str,c);
 
 result = Revsq(str,c);    // revsq해준 값을 받는 결과 변수.
 

 printf("\n%s\n",result);
 
 
 
 return 0;
}

/*
RevsQueeze 함수.☆★☆★☆★☆★
-1. c를 제거한다.
-2. 거꾸로 저장.
*/

char* Revsq(char* pstr, char c){
 int cnt = strlen(pstr)+1;   //ex) str="abc" strl =3 , cnt =4
 int j=0;
 char* temp = (char*)malloc(strlen(pstr)+1);   //새로운 문자열이 저장될 포인터.temp의 유동적 메모리 할당.
 for(; cnt>=2; cnt--){        //☆★☆★☆★ex)cnt = 4..3..2..
  if(*(pstr+cnt-2) != c)       //☆★☆★☆★ *(pstr(0)+cnt(4)-2)='c'(인덱스가 2인 세번째 요소.)
   *(temp+j++) = *(pstr+cnt-2);
  else
   continue;
 }
 *(temp+j) = '\0';

return temp;
}

이 글은 스프링노트에서 작성되었습니다.

'Programming Language > C' 카테고리의 다른 글

C Tutorial (strcmp+numcmp)  (0) 2010.10.14
C Tutorial ([C.L.A]. 문자열중간읽기)  (0) 2010.10.14
C Tutorial (문자열크기비교)  (0) 2010.10.14
C Tutorial (실수형to문자열)  (0) 2010.10.14
C Tutorial (문자열to실수형)  (0) 2010.10.14
Posted by BLUE-NOTE