読者です 読者をやめる 読者になる 読者になる

個人的自由ノート

ふと自分が気になった事を書いてます

C++で問題を解く

文字列ポインタの問題、思ったより重いですね。なかなか難しいので、紙に書いて考えないと、頭がごちゃごちゃになりますね。とりあえず今日は1問だけ解きました。問題数あまりこなせなかったので、その代わりに別解を考えました。

#include <iostream>
#include <cstdlib>
#include <cctype>

using namespace std;

char* strrmv_digits(char* s){
    char* save = s;

    while(*s && !isdigit(*s))
        s++;
    if(!*s)
        return save;

    char* p = s;

    while(*s){
        if(!isdigit(*s))
            *p++ = *s;
        s++;
    }

    *p = '\0';

    return save;
}

int main(void){
    char* s = (char*)calloc(16, sizeof(char));
    cout << "文字列 : ";
    cin >> s;
    cout << "数字を削除したら" << strrmv_digits(s) << "となりました。" << endl;
    return 0;
}
#include <iostream>
#include <cstdlib>

using namespace std;

char* strrmv_digits(char* s){
    char* save = s;
    
    while(*s && !(*s >= '0' && *s <= '9'))
        s++;
    if(!*s)
        return save;

    char* p = s;

    while(*s){
        if(!(*s >= '0' && *s <= '9'))
            *p++ = *s;
        s++;
    }

    *p = '\0';

    return save;
}

int main(void){
    char* s = (char*)calloc(16, sizeof(char));
    cout << "文字列 : ";
    cin >> s;
    cout << "数字を削除したら" << strrmv_digits(s) << "となりました。" << endl;
    return 0;
}

isdigit関数、楽ですね。存在を知りませんでした。ASCIIコードを利用した解もつけておきました。明日も解ける問題数少ないかも。しばらく文字列ポインタの重い問題が続きそうです。