[포스코x코딩온] 스마트팩토리 1주차 회고 2 | 공백이 있는 문자열 입력받기

이종훈·2023년 3월 26일
0
post-thumbnail

영어로 된 문자열 모두 소문자로 입력 받아서 문자열에 사용된 문자의 개수를 구하시오
ex)
입력예시 : apple
출력예시 : 4 개 ( a, p, l, e )
입력예시 : bacon
출력예시 : 5 개 ( b, a, c, o, n )
입력예시 : i have a pen
출력예시 : 7 개 ( i, h, a, v, e, p, n )

오늘 실습문제중 가장 머리가 복잡해졌던 문제!
문장을 입력 받아서 중복문자를 없애고, 사용된 알파벳의 갯수를 출력하는 문제이다.

처음 생각한 솔루션은

문장을 입력 받고 > 한글자씩 for문으로 읽고 > 정답set의 알파벳과 일치하는지 비교하고 > 일치하는 알파벳이 없다면 정답set에 추가한다

였다. 하지만 C++에서는 string으로 공백이 포함된 문장을 받으면, 공백 이후는 다음 번 입력으로 인식한다는 문제가 있었다. 그 문제를 해결하기 위해 std::getline(std::cin, 호출자) 방법을 사용해 문장 전체를 입력받을 수 있었다.

다음 문제로 공백이 글자로 인식되어서 정답set의 한 자리를 차지한다는 점이 있었는데, for문을 들어가기 전 char의 값이 " " 인지 아닌지 판별하는 장치를 넣었다.

#include <iostream>
#include <vector>
#include <string>



int main()
{

    std::vector<char> str_set;

    std::string str;
    std::getline(std::cin, str);

    for (int i = 0; i < str.length(); i++) {
        bool is_in = false;
        if (str[i] != ' '){
            for (int j = 0; j < str_set.size(); j++) {
   
                if (str[i] == str_set.at(j)) {
                    is_in = true;
                }
            
        }
        if (is_in == false) {
            str_set.push_back(str[i]);
        }}
        
    }
    std::cout << "\n" << str_set.size() << " 개 (" ;

    for (int i = 0; i < str_set.size()-1; i++) {
        std::cout << str_set[i] << ", ";
    }
    std::cout << str_set[str_set.size()-1] << " )";
}

코드를 실행한 화면은 다음과 같다.

profile
개발새발

0개의 댓글