Tech Blog/C and C++
C언어 - 단어 제거+Reverse (revsqueeze)
EXPRESSIONS HAVE POWER
2021. 6. 8. 22:00
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 100
// 주어진 문자열에서 또 다른 주어진 문자를 제거하고 압축한 후에,
// 역 순화 시킨 문자열을 만들어주는 함수 revsqueeze(s,c)를 만드시오.
// ex) abcabc b (입력) -> caca(출력)
// revsqueeze 함수 선언
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 = 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;
}
실행결과
abcabc b 입력하면
caca로 출력됨.
주의사항
1. 반드시 포인터 활용.
현재상황 - 이해불가.