C言語関係掲示板

過去ログ

No.947 小文字を大文字に変換し,文字と文字の間に空白を入れる

[戻る] [ホームページ]
No.12046

この問題を教えてください。
投稿者---あい(2004/01/22 21:01:19)


アルファベットの文字列が引数にとり,そのアルファベットが 小文字ならば大文字に変換し,さらに文字列の全ての文字と文字の間に 空白を入れて印字する 関数 conv() を書け.返り値は voidにせよ.
例 aiaiaiaiなら A I A I A I A I

No.12049

Re:この問題を教えてください。
投稿者---あかま(2004/01/22 21:31:27)


void conv(char *str){
    for(;*str;str++){
        fputc(toupper(*str),stdout);
        fputc(' ',stdout);
    }
}


No.12072

Re:この問題を教えてください。
投稿者---fickler(2004/01/23 15:17:18)


この回答だと、文字列の最後にも空白が付いてしまいますね。
でも、あと少しです。自分で考えて正解を見つけましょう。

No.12073

Re:この問題を教えてください。
投稿者---fickler(2004/01/23 15:26:36)


>自分で考えて正解を見つけましょう。

こんなこと言っといてなんですが、サンプルコードです。

void conv(char *str)
{
    for(char *s = str; *s; s++){
        if(s != str){
            fputc(' ', stdout);
        }
        fputc(toupper(*s), stdout);
    }
}


1文字分、先読みするやり方もあります。
いろいろな方法で書けるようになってください。

No.12077

Re:この問題を教えてください。
投稿者---あかま(2004/01/23 16:26:41)


無理矢理ループ条件を真ん中に持ってきてみる手も。
void conv(char *str){
    if(*str == 0) return;
    for(;;){
        fputc(toupper(*str),stdout);
        if(*++str == 0) break;
        fputc(' ',stdout);
    }
}