練習 [11] ポインタ②(1/5)

練習 1(提出プログラム名:p1101a.c)

まず,このプログラム(p1101a.c)をダウンロードしなさい.
このプログラムでは,入力された英単語について,1 文字ずつ < > で囲んで出力するようになっている.
文字数も表示させようとしているが,そちらは未完成である.
この中の関数 print_str を次の(1),(2)の条件を満たすように書き換えなさい.

 (1)すべての文字を < > で囲むのではなく,大文字だけを囲むように変更しなさい.
 (2)以下の実行例のように文字数(大文字と小文字の内訳を含む)も出力させなさい.

なお,この問題では入力される文字はすべてアルファベットであると仮定してよいものとする.

【注意】
● 文字数を数えるにあたって(講義の後半で紹介した) strlen を使ってはいけません.
 (ただし,自前で関数を作って使うのはOKとする.)
● main 関数の内容を書き換えてはいけません.

【ヒント】
文字が大文字かどうかの判定は以前の講義(文字列の回)で説明した isupper 関数が使えます.
例えばポインタ p で参照している文字が大文字かどうかの判定は
  if ( isupper(*p) ){ ...
と書けば良いことになります(※条件式に == 1 と書くのは誤りなので注意).
ただし,プログラムの冒頭に #include <ctype.h> が必要です.

  • 【プログラムの実行例】(その1)※赤字は実行時にキーボードから入力する内容
    ※大文字だけが < > で囲まれているか,文字数は 3 種類ともすべて正しいか,よく確認せよ
英単語を入力してください:ProgrammingLanguageCPP
<P>rogramming<L>anguage<C><P><P>⏎
(22文字:大文字5文字 + 小文字17文字)⏎

  • 【プログラムの実行例】(その2)※赤字は実行時にキーボードから入力する内容
英単語を入力してください:SampleDataFile
<S>ample<D>ata<F>ile⏎
(14文字:大文字3文字 + 小文字11文字)⏎

【過去にあったミス(減点となり,やり直しを命じられる)】
■ 2 種類の実行例を確認せずに提出してしまっている.
■ ヒントを見落としていて isupper の使い方を間違っている.
■ インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).


ミスが無いことを確認したら次の問題へ → [ 練習 2 (p1102a.c) ]