최대 1 분 소요

문제

문자열 N개가 주어진다. 이때, 문자열에 포함되어 있는 소문자, 대문자, 숫자, 공백의 개수를 구하는 프로그램을 작성하시오.

각 문자열은 알파벳 소문자, 대문자, 숫자, 공백으로만 이루어져 있다.

입력

첫째 줄부터 N번째 줄까지 문자열이 주어진다. (1 ≤ N ≤ 100) 문자열의 길이는 100을 넘지 않는다.

출력

첫째 줄부터 N번째 줄까지 각각의 문자열에 대해서 소문자, 대문자, 숫자, 공백의 개수를 공백으로 구분해 출력한다.

문제 링크

https://www.acmicpc.net/problem/10820

난이도: 브론즈 2

알고리즘 분류

  • 구현
  • 문자열

    C++를 사용한 풀이

#include <iostream>
#include <string>

using namespace std;

class Stack{
    private:
        int* arr;
        int size;
    public:
        Stack(){
            arr=new int[101];
            size=0;
        }
        ~Stack(){
            delete [] arr;
        }
        void push(int x);
        int pop();
        int size_value();
        int empty();
        int top();

};
void Stack::push(int x){
    arr[size]=x;
    size++;
}
int Stack::pop(){
    if(size==0) return -1;
    int value=arr[size-1];
    size--;
    return value;
}
int Stack::size_value(){
    return size;
}
int Stack::empty(){
    if(size==0) return 1;
    else return 0;
}
int Stack::top(){
    if(size==0) return -1;
    return arr[size-1];
}

int main(void){
    string str("temp");
    int i=0;
    while(i<100){
        //cin.ignore();
        cin.clear();
        getline(cin,str);
        if(str.length()<=0) break;
        Stack a;
        Stack A;
        Stack num;
        Stack space;
        int len= str.length();
        for(int j=0;j<len;++j){
            if('a'<=str[j]&&str[j]<='z') a.push(1);
            else if('A'<=str[j]&&str[j]<='Z') A.push(1);
            else if('0'<=str[j]&&str[j]<='9') num.push(1);
            else if(str[j]==' ') space.push(1);
        }
        cout<<a.size_value()<<" "<<A.size_value()<<" "<<num.size_value()<<" "<<space.size_value()<<endl;
        i++;
    }
}

https://www.acmicpc.net/source/31092645

댓글남기기