본문 바로가기
Programming Language/C C++

[알고리즘 문제풀이] 7. 영어단어 복구★

by 9루트 2022. 1. 5.

ASCII 코드
스페이스바는 ASCII코드에 32번

 

내 방식을 포함한 해설풀이

#include <stdio.h>
using namespace std;
	
int main(){
	
	//freopen("input.txt", "rt", stdin);
	
	// 1. 문자열을 입력받는다.
	char array[100]; 
	//scanf("%s", &array); // 이걸로 하면 띄어쓰기 때문에 입력이 안된다. 
	gets(array);
	
	// 2. 영어알파벳만 추출하여 소문자 배열로 만든다.
	char englishArray[100];
	int j = 0;
	for(int i = 0; array[i] != '\0'; i++){
		if(array[i] >= 65 && array[i] <= 90){
			englishArray[j] = array[i] + 32;
			j++;
		}
		else if(array[i] >= 97 && array[i] <= 122){
			englishArray[j] = array[i];
			j++;
		}		
	} 
	
	englishArray[j] = '\0'; 
	
	// 3. 알파벳 배열을 출력한다.
	//for(int i = 0; englishArray[i] != '\0'; i++){	printf("%s", &englishArray[i]);}
	
	printf("%s\n", englishArray);
	
	
	return 0;
}

 

새롭게 알게 된 점01

스페이스바(공백)을 포함한 문자열을 입력할 때는 

scanf("%s", &array);

을 쓰면 잘 입력되지 않으므로

	gets(array);

을 쓰자

 

 

새롭게 알게된 점02

배열을 끝 마칠 때 '\0' 을 넣어줘서 끝났다는 표시를 해준다.

englishArray[j] = '\0';

 

새롭게 알게 된 점03

문자열 배열을 출력할 때 

for(int i = 0; englishArray[i] != '\0'; i++){
	printf("%s", &englishArray[i]);
}

을 쓰면 

이런 식으로 이상하게 나온다..

printf("%s\n", englishArray);

을 쓰자

 


 

본해설

#include <stdio.h>
using namespace std;
	
int main(){
	
	//freopen("input.txt", "rt", stdin);
	
	// 1. 문자열을 입력받는다.
	char array[100]; 
	//scanf("%s", &array); // 이걸로 하면 띄어쓰기 때문에 입력이 안된다. 
	gets(array);
	
	// 2. 영어알파벳만 추출하여 소문자 배열로 만든다.
	char englishArray[100];
	int j = 0;
	for(int i = 0; array[i] != '\0'; i++){
		if(array[i] != ' '){
			if(array[i] >= 65 && array[i] <= 90){
				englishArray[j++] = array[i] + 32;
			}
			else englishArray[j++] = array[i];
		}		
	} 
	
	englishArray[j] = '\0'; 
	
	// 3. 알파벳 배열을 출력한다.
	//for(int i = 0; englishArray[i] != '\0'; i++){	printf("%s", &englishArray[i]);}
	
	printf("%s\n", englishArray);
	
	
	return 0;
}