이번 문제는 문자열을 입력받고
그 문자가 두 번 이상 반복될 경우에 압축을 시키는 프로그램입니다.
그 문자가 알파벳이든 특수문자든 상관없이
aaabbeee 면 a3b2e3을 출력시키는 그런 것입니다.
단, 연속해서 나오는 문자만 가능합니다.
#include<iostream>
#define MAX_STRING_SIZE 256 //배열 크기 선언
using namespace std;
int main()
{
char arr[MAX_STRING_SIZE];
int count = 1;
scanf_s("%[^\n]s", arr, MAX_STRING_SIZE);//공백값까지 입력
for (int i = 0; *(arr + i) != 0; i++)
{
if (arr[i] != arr[i + 1])
{
cout << arr[i];//뒤에 배열과 값이 같지 않다면 출력
if (count >= 2)//전에 배열과 같다가 뒤에 배열과 다를경우
{
cout<< count;
count = 1;//압축갯수 초기화
}
}
else
count++;//압축갯수 증가
}
return 0;
}
배열 크기는 그냥 제 마음대로 define 했습니다.
그리고 이 문제에서 제가 쓴 핵심은 scanf_s("%[^\n] s", arr, MAX_STRING_SIZE);입니다.
scanf는 보통 공백을 입력받지 못해서 공백이나 줄 바꿈이 오면 입력을 받지 않는 함수입니다.
하지만 그런 scanf함수를 공백까지 입력을 받게 하려면 [^\n]을 사용하면 됩니다.
보통의 scanf로 문자열을 입력받을 때는 scanf_s("%s", arr); 이지만
[^\n]를 추가하고 얼마큼 받을 건지 작성하면
scanf_s("%[^\n]s", arr, MAX_STRING_SIZE); 공백까지 입력받을 수 있습니다.
이제 소스코드를 보시면 뒤에 배열과 값이 같은 경우는 압축 개수를 증가시켰고, 뒤에 배열과 값이 다르다면 전에 배열과 같다가 뒤에 배열과 다를 경우를 구분한 것을 확인할 수 있습니다.
#이 문제의 출처는 kw대학교 컴퓨터정보공학부 2021년 1학기 객체지향프로그래밍 과제문제입니다.
1-7 1차나 상수식을 검증하는 프로그램 (0) | 2021.07.12 |
---|---|
1-6 체크섬을 구하는 문제 (0) | 2021.07.09 |
1-4 영어만 출력하고 대문자는 소문자로 바꾸기 (0) | 2021.07.08 |
1-3 난수 생성 후 오름차순 정렬 (0) | 2021.07.08 |
1-2 방향을 입력받고 해당 방향으로 더하는 배열 (0) | 2021.07.08 |
댓글 영역