C言語の練習問題を解いています。
問題は1行目に数値n,mがスペース区切りで、そしてその下に文章が与えられます。n番目の文字からm番目の文字までを全て大文字にして、それ以外の部分はスペースや大文字・小文字を変えずにそのまま出力するというものです。スペースも一文字とします。
入力例は
2 6
this is a pen
この時の出力例は
tHIS Is a pen です。
私は次のように記述しました。
#include <stdio.h> int main(void){ char buf[1000]; char str; int n, m; int i; fgets(buf, sizeof(buf), stdin); sscanf(buf, "%d %d", &n, &m); for(i = 0; i < n - 1; i++) { fgets(buf, sizeof(buf), stdin); printf("%c", buf[i]); } for(i = n - 1; i < m; i++) { fgets(buf, sizeof(buf), stdin); str = buf[i]; if(str >= 97 && str <= 122) { str = str - 32; printf("%c", str); } } for(i = m; buf[i] != '\0'; i++) { fgets(buf, sizeof(buf), stdin); // str = buf[i]; printf("%c", buf[i]); } return 0; }
これですと大文字にする範囲がスペースを跨ぐ時に、スペースを無視して詰めて大文字にしてしまっているようなのです。
スペースを無視している分大文字にする文字数にズレが生じること、そもそもスペースが消えてしまうことはどのように修正したら良いのでしょう。
ご教示頂けますでしょうか。
回答4件
あなたの回答
tips
プレビュー