見出し画像

(答案提出)C言語教室 第10回 - 文字種判定と文字コード

皆様、あけましておめでとうございます。
本年もどうぞ宜しくお願いいたします。

年末年始でバタバタしていたら、kznさんからの課題の提出を忘れるところでした。今回からは演習問題も出されていますが、こちらはもう少し時間をください。(冬休みの宿題の提出期限延長を泣きつく生徒の気分、、、)

課題

課題
呼び出し側で用意した文字列に含まれる英小文字をすべて英大文字に書き換える関数を書きなさい。

https://note.com/kazushinakamura/n/nee40b47517f7?magazine_key=m07bb4da8df3e


私の答案 - 呼び出し側で用意した文字列に含まれる英小文字をすべて英大文字に書き換える関数

第7回の課題「動的なメモリ割り当て」の答案に少し手を加えてみました。

/* main.c */ 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

char * test10(char* x) {
  char *d;
  char *src, *dst;
  int i, len = 0;

  len = strlen(x) + 1;
  d = (char*)malloc(len);

  src = x;
  dst = d;

  for (i = 0; i < len; i++) {
    *dst++ = islower(*src) ? toupper(*src) : *src;
    *src++;   
  }

  return d;

}

void main() {
  char src[] = "A Happy New Year 2023";
  char *dup;

  dup = test10(src);

  printf("source = %s\n", src);
  printf("result = %s\n", dup);

  free(dup);
}

ただ単に対象となる文字をtoupper関数に放り込めば良いのかもしれませんが、使い慣れない3項演算子を使ってみたかった(笑


実行結果 - 呼び出し側で用意した文字列に含まれる英小文字をすべて英大文字に書き換える関数

source = A Happy New Year 2023
result = A HAPPY NEW YEAR 2023

どうでしょうか? 
一応は、機能しているようです。
(動作環境;https://9cguide.appspot.com/web_picoc_em.html )

答え合わせが楽しみ!


(独り言)

日本から戻ってきて、荷物の片付けやら洗濯やらを済ませ、昼ごはんを食べた後、ゴロンとしていたらうっかり寝込んでしまった。時差の調整のためこちらの夜までしっかり起きておくつもりだったのに、やっちまった(苦笑

こちらの22時前(日本時間の朝6時前)に目覚めて、慌てて晩ご飯。
目が冴えてしまって寝られないのでNOTEを見始めて、忘れていた宿題を思い出したという次第。これは、宿題をちゃんとしなさい、という仏様のお導き?きっとそうに違いない。

今年もどうぞ宜しくお願いします。


ここまで読んでいただき、有難うございました。

いいなと思ったら応援しよう!

Akio van der Meer
これまでの収益は全て、それを必要としておられる方々へ、支援機関を通して寄付させていただきました。この活動は今後も継続したいと思っています。引き続きよろしくお願いいたします。