寝癖頭の解法

学習中の覚え書きを投稿、更新していきます。

paizaラーニング: C++による「文字列処理メニュー」問題集(5)

paizaラーニングのレベルアップ問題集「文字列処理メニュー」からの出典です。
paiza.jp
C++による「文字列処理メニュー」問題集と、それらの提出コードの解答例です。

僕が作成、提出したコードは、以下のとおりです。

・C : 日時データの変換その2

/*
C++による「文字列処理メニュー」問題集(5)
C : 日時データの変換その2
https://paiza.jp/works/mondai
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    string s,s1;
    cin>>s>>s1;
    for(int i=0;i<s.size();i++){
        if(s[i]=='/'){
            cout<<endl;
        }else{
            cout<<s[i];
        }
    }
    cout<<endl;
    for(int i=0;i<s1.size();i++){
        if(s1[i]==':'){
            cout<<endl;
        }else{
            cout<<s1[i];
        }
    }
    return 0;
}

・C : 数値判定

/*
C++による「文字列処理メニュー」問題集(5)
C : 数値判定
https://paiza.jp/works/mondai
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    string s;
    cin>>s;
    for(int i=0;i<s.size();i++){
        if(s[i]!='0' && s[i]!='1' && s[i]!='2' && s[i]!='3' &&
            s[i]!='4' && s[i]!='5' && s[i]!='6' && s[i]!='7' &&
             s[i]!='8' && s[i]!='9'){
               cout<<"NO"<<endl;
               return 0;
        }
    }
    cout<<"YES"<<endl;
    return 0;
}

・C : 重複の削除

/*
C++による「文字列処理メニュー」問題集(5)
C : 重複の削除
https://paiza.jp/works/mondai
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    string s;
    cin>>s;
    int c0=0,c1=0,c2=0,c3=0,c4=0;
    int c5=0,c6=0,c7=0,c8=0,c9=0;
    for(int i=0;i<s.size();i++){
        if(s[i]=='0'){
            c0++;
            if(c0<2){
                cout<<s[i];
            }
        }else if(s[i]=='1'){
            c1++;
            if(c1<2){
                cout<<s[i];
            }
        }else if(s[i]=='2'){
            c2++;
            if(c2<2){
                cout<<s[i];
            }
        }else if(s[i]=='3'){
            c3++;
            if(c3<2){
                cout<<s[i];
            }
        }else if(s[i]=='4'){
            c4++;
            if(c4<2){
                cout<<s[i];
            }
        }else if(s[i]=='5'){
            c5++;
            if(c5<2){
                cout<<s[i];
            }
        }else if(s[i]=='6'){
            c6++;
            if(c6<2){
                cout<<s[i];
            }
        }else if(s[i]=='7'){
            c7++;
            if(c7<2){
                cout<<s[i];
            }
        }else if(s[i]=='8'){
            c8++;
            if(c8<2){
                cout<<s[i];
            }
        }else if(s[i]=='9'){
            c9++;
            if(c9<2){
                cout<<s[i];
            }
        }
    }
    cout<<endl;
    return 0;
}

・C : パスワード作成

/*
C++による「文字列処理メニュー」問題集(5)
C : パスワード作成
https://paiza.jp/works/mondai
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int N,Q;
    cin>>N>>Q;
    vector<int> n(Q);
    char c[Q],C,ans[N];
    for(int i=0;i<Q;i++){
        cin>>n[i]>>c[i];
    }
    cin>>C;
    for(int i=0;i<N;i++){
        ans[i]=C;
    }
    for(int i=0;i<Q;i++){
        ans[n[i]-1]=c[i];
    }
    for(int i=0;i<N;i++){
        cout<<ans[i];
    }
    cout<<endl;
    return 0;
}

・C : 表記の訂正

/*
C++による「文字列処理メニュー」問題集(5)
C : 表記の訂正
https://paiza.jp/works/mondai
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    string s;
    cin>>s;
    int dc=0,d;
    for(int i=0;i<s.size();i++){
        if(s[i]=='.'){
            dc++;
            if(dc==1){
                d=i;
            }
        }
    }
    if(dc==0){
        for(int i=0;i<s.size();i++){
            if(s[i]!='0'){
                for(int j=i;j<s.size();j++){
                    cout<<s[j];
                }
                cout<<endl;
                return 0;
            }
        }
    }else if(dc==1){
        if(s[d-1]=='0'){
            int zc=0,zc0=0,zc1=0;
            for(int i=0;i<s.size();i++){
                if(s[i]=='0'){
                    zc0++;
                }else{
                    break;
                }
            }
            for(int i=0;i<s.size();i++){
                if(s[i]=='0' && s[i+1]!='.' && s[i+2]=='.'){
                    zc++;
                    break;
                }else if(s[i]=='0'){
                    zc++;
                }
            }
            for(int i=s.size()-1;i>=0;i--){
                if(s[i]=='0'){
                    zc1++;
                }else{
                    break;
                }
            }
            for(int i=zc0-zc;i<s.size()-zc1;i++){
                cout<<s[i];
            }
        }else{
            int zc=0,zc0,zc1=0;
            for(int i=0;i<s.size();i++){
                zc++;
                if(i+1==d){
                    break;
                }
            }
            zc0=zc;
            for(int i=0;i<zc0;i++){
                if(s[i]!='0'){
                    zc--;
                }
            }
            for(int i=s.size()-1;i>=0;i--){
                if(s[i]=='0'){
                    zc1++;
                }else{
                    break;
                }
            }
            for(int i=zc+1;i<s.size()-zc1;i++){
                cout<<s[i];
            }
        }
        cout<<endl;
        return 0;
    }else if(dc>=2){
        int dc1=0,zc=0,zc0=0,zc1=0;
        for(int i=0;i<s.size();i++){
            if(s[i]=='.'){
                dc1++;
                if(dc1>=2){
                    s.erase(i,1);
                }
            }
        }
        if(s[d-1]=='0'){
            int zc=0,zc0=0,zc1=0;
            for(int i=0;i<s.size();i++){
                if(s[i]=='0'){
                    zc0++;
                }else{
                    break;
                }
            }
            for(int i=0;i<s.size();i++){
                if(s[i]=='0' && s[i+1]!='.' && s[i+2]=='.'){
                    zc++;
                    break;
                }else if(s[i]=='0'){
                    zc++;
                }
            }
            for(int i=s.size()-1;i>=0;i--){
                if(s[i]=='0'){
                    zc1++;
                }else{
                    break;
                }
            }
            for(int i=zc0-zc;i<s.size()-zc1;i++){
                cout<<s[i];
            }
        }else{
            int zc=0,zc0,zc1=0;
            for(int i=0;i<s.size();i++){
                zc++;
                if(i+1==d){
                    break;
                }
            }
            zc0=zc;
            for(int i=0;i<zc0;i++){
                if(s[i]!='0'){
                    zc--;
                }
            }
            for(int i=s.size()-1;i>=0;i--){
                if(s[i]=='0'){
                    zc1++;
                }else{
                    break;
                }
            }
            for(int i=zc;i<s.size()-zc1;i++){
                cout<<s[i];
            }
        }
        cout<<endl;
        return 0;
    }
}

paizaラーニングのレベルアップ問題集については、ユーザー同士で解答を教え合ったり、コードを公開したりするのは自由としています。
また授業や研修、教材などにも利用できるそうです。