- 締切済み
計算機言語(C言語)の課題です。
ポインタstrが文字列の先頭文字を指している時、その文字列に含まれる英小文字を英大文字に変換する関数 void str_toupper(char *str) を作成しなさい。ただし、英小文字a~zおよび英大文字A~Zには、それぞれ昇順に、連続した1バイトの整数が割り当てられているものとする。例えば、aには10進数の97、zには10進数の122が割り当てられ、Aには10進数の65、Zには10進数の90が割り当てられるといった具合である。
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- 和泉 博(@hiroshi09s)
- ベストアンサー率54% (59/109)
まず、丸投げは禁止です。自分なりに努力した姿勢を示すことが大事です。 まあ、2ページめに回され、忘れ去られる運命にあるようですから、もう回答しても良いでしょう。 課題は、英子文字を英大文字に変換しなさい。ただし、文字の比較は10進数を使うこと。 すなわち、「習ったアスキーコード表の10進数を使い、英字を大文字に変換せよ」ということです。 http://e-words.jp/p/r-ascii.html 回答プログラムがチョー簡単なところから察するに、きちんと講義は受けるべきです!! 一時的な回答はえられても、自分の得にはなりません。 #include <stdio.h> void str_toupper(char *str); int main(void) { char buff[]="Until Saturday, Burmese democracy campaigner Aung San Suu Kyi was arguably the world's most famous prisoner."; printf("buff[]:¥n%s¥n", buff); str_toupper(buff); printf("result:¥n%s¥n", buff); return 0; } void str_toupper(char *str) { int c; while(c=*str) { if(c>=97 && c<=122){ *str=c-32; //32=97-65 } str++; } } ----- 実行結果 ----- buff[]: Until Saturday, Burmese democracy campaigner Aung San Suu Kyi was arguably the world's most famous prisoner. result: UNTIL SATURDAY, BURMESE DEMOCRACY CAMPAIGNER AUNG SAN SUU KYI WAS ARGUABLY THE WORLD'S MOST FAMOUS PRISONER. http://www.bbc.co.uk/news/world-asia-pacific-11761133
- Tacosan
- ベストアンサー率23% (3656/15482)
string を std 名前空間で使うなら transform もそうした方がいいのではないかと& toupper を使うためには cctype を #include せにゃまずいのではないか>#4.
- zuntac
- ベストアンサー率36% (45/124)
#include <string> #include <algorithm> #include <iostream> void str_toupper(std::string& str) { transform(str.begin(), str.end(), str.begin(), toupper); } 面倒だから引数はstringにしちゃいましたが、ちゃんと説明できれば許してもらえるのでは。
- Tacosan
- ベストアンサー率23% (3656/15482)
個人的には, そこは許していいと思う>#2. 「言葉のあや」ってものもあるし. それよりも, 「ただし、英小文字a~zおよび英大文字A~Zには、それぞれ昇順に、連続した1バイトの整数が割り当てられているものとする。」の方が許しがたい. こんな条件は「腐ったプログラム」 (あるいは「腐ったプログラムを書くやつ」) を拡大再生産するだけでまったく意味がないのに.... まともなプログラマなら, この条件はあってもなくても同じプログラムを書く.
- SaKaKashi
- ベストアンサー率24% (755/3136)
ここは課題を出されたら回答するところかな。 ま、いいけどね。 >ポインタstrが文字列の先頭文字を指している時 ポインタは必ず文字列の先頭を指してるけど? ポインタの指しているところが文字列の中間かどうかわからんよね。 問題がおかしいよ。 あなたは日本語と課題を理解できてる?
- php504
- ベストアンサー率42% (926/2160)
課題は自分でやりましょう C言語では文字を' 'で囲むとその文字の値になります 問題の例では'a'は97に'A'は65になります 文字の値が'a'以上'z'以下であれば小文字ということです 次にa-z A-Zがそれぞれ連続しているということは大文字と小文字の差はすべて同じということになります 問題に書かれた例ではaとAの差は32、zとZの差も32になります プログラムで差を求めるには'a' - 'A' とか 'z' - 'Z'を使えば文字コードが何であっても大丈夫です 後はがんばって