1264번: 모음의 개수 (acmicpc.net)

 

1264번: 모음의 개수

입력은 여러 개의 테스트 케이스로 이루어져 있으며, 각 줄마다 영어 대소문자, ',', '.', '!', '?', 공백으로 이루어진 문장이 주어진다. 각 줄은 최대 255글자로 이루어져 있다. 입력의 끝에는 한 줄

www.acmicpc.net

 

문제가 원하는 답은 

How are you today? 일때  7

Quite well, thank you, how about yourself 일때 14

I live at number twenty four 일때  9

종료

이렇게 짜면될거같습니다. 딱히 문장갯수 이야기가없어 제한없이 무한반복으로 받겠습니다..

문자열을 처리할때 띄어쓰기 포함은 %[^\n]s 로 입력받고

바로 밑단에 getchar() 를 이용해 개행키를 받아주기로 합시다,,,,, 하지 않으면 오류남

#include <stdio.h>
#include <string.h>

int main(){
	char a[255];
	int cnt =0;

	while(1){
    	scanf("%[^\n]s",a);
    	// getchar();
    	printf("%s",a);
}



}

이렇게 오류납니다,,

 

#include <stdio.h> 
#include <string.h> //---(1)

int main(){
char a[256]; //---(2)
int cnt =0; //---(3)

while(1){ // ---(4)
    scanf("%[^\n]s",a); //---(5)
    getchar(); //---(6)
    for(int i=0;i<strlen(a);i++){ //---(7)
        if(a[i]=='a'||a[i]=='i'||a[i]=='u'||a[i]=='e'||a[i]=='o'||a[i]=='A'||a[i]=='I'||a[i]=='U'||a[i]=='E'||a[i]=='O') 
        cnt++;
    }
    if(a[0]=='#'&&strlen(a)==1) break; //---(8)
   
    printf("%d\n",cnt);
    cnt =0; //---(9)
}



}

풀코드입니다 위에서 부터보면

(1) #include <string.h> (7),(8) 번에서 쓰이는 문자열 함수 strlen( )을 불러오기 위한 라이브러리입니다. 문자열 길이를 알수있습니다.

(2) 문제 조건에 보면

라고 하는데 c언어에서 문자열에 마지막은 \0 널값입니다, 그래서 문자열의 크기를 256으로 할당했습니다.

(3) 정수형 변수 cnt 는 0으로 초기화 해주었습니다

(4) 반복문은 문제의 조건에 문장이 몇개인지 명시되어있지않아 # 이 나오기 전까지 계속 무한 반복하기위해 while(1)

(5) 위에서 설명했던거 처럼 띄어쓰기도 문자로 받기위해 scanf("%[^\n]s",a) 라고 써주었습니다

(6) 엔터키(개행키)를 따로 받아주기위해 getchar( ) 함수를 이용했습니다 왠지(5)번에 [^\n]와 같이쓰니 오류가 나는거같았습니다.,,.,.

(7) 받아온 문자열 a를 반복문을통해 문자열길이만큼 반복해서 모음의 갯수를 파악합니다. 추가로(3)의 변수 cnt에 조건에 만족한다면 1씩 증가시킵니다.

(8) 문제의 조건이었던 #이 나오면 종료되게 하기위해 break문으로 while(1) 밖으로 나갈수있게해줍니다. 여기서 #hi와 같은 문장도 혹시나 테스트할때 들어갈까봐 깔끔하게 # 한글자만 나왔을때 종료되게 하게끔 조건을

if(a[0]=='#' && strlen(a)==1 ) break;  이렇게 걸었습니다.

(9) 하나의 문장테스트가 끝나면 cnt의 누적된 값이 다음 문장에 영향을 끼치지 않게하기위해 다시 0으로 초기화해주었습니다.

 

더 깔끔하게 쓰고싶습니다,, 화이팅,,

+ Recent posts