• ベストアンサー

ファイル入出力

ファイル入出力の問題で、文字列を読み込んで、読み込んだ文字列中のアルファベットの小文字を大文字に変換する。というものがありました。どうやればいいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

> わからないのは、文字列中の小文字を大文字にするです。 #include <ctype.h> void capitalize(char* s) {   while ( *s ) {    *s = toupper(*s);    ++s;   } }

Balzary
質問者

補足

解説をしていただけないでしょうか?

その他の回答 (8)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.9

vista にcygwinを導入するときに問題が出ている人はそれなりにいるようです。 一応対応はすんでいるはずなのですが。 MMBT~マグロの 目の ぶよぶよした ところ ~ : Cygwin + Vista http://gaks.exblog.jp/7058265/ Cygwinのインストール(Windows Vista) http://www.twcu.ac.jp/~osada/comp2a/cygwin-vista.html とりあえず、setup.exe を起動してから X 関連ははずし、 開発ツール(gccなどがあるところ)をチェックするなどして ダウンロードの対象を絞っておくと良いかもしれません。

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.8

#6です。 ソース見てみましたが、1箇所問題があります。 void convc(char c)では無く、char convc(char c)としないと値をreturnできません。 >return c - ('a' - 'A'); の意味は、charは文字が数値で表現されています。'a'なら97、'A'なら65です。これは理解できてますか? で、cに'a'が入っていたら、97-(97-65)=65ですよね?で、65は文字の'A'です。 じゃあ、cに'c'が入っていたらどうなりますか?計算してみてください。 文字コード表をもう一度書いておきます。 http://e-words.jp/p/r-ascii.html 私の環境はVistaでcygwin入れてますが問題なく動いてますよ。必要容量も300MB程度です。 どんな状況か説明してもらえるとフォローできるかもしれません。

Balzary
質問者

お礼

本当にありがとうございます。理解することができました。

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.7

★他の回答者の『この回答への補足』より。 >わからないのは、文字列中の小文字を大文字にするです。  ↑  C言語では文字変換の関数(マクロ関数も含む)で toupper()、tolower() の2つがあります。  int toupper(c) は引数 c で与えられた文字が小文字(a-z)なら大文字(A-Z)を戻り値に返します。  int tolower(c) は引数 c で与えられた文字が大文字(A-Z)なら小文字(a-z)を戻り値に返します。  という処理ですのでこれを使うと良い。 >ソースコードは学校のパソコンにあるので、今は見せることができません。 >すいません。文字列を読み込む所まではできています。  ↑  自宅でパソコンはあるのですよね。  コンパイラはありますか?  持っていない場合は用意した方が良いと思います。  http://oshiete1.goo.ne.jp/qa3124626.html→『プログラミング(数学的) 初心者です』  用意するのなら上のリンクの回答 No.6 を参考にして下さい。 >ちなみに使っている参考書は、C言語によるプログラミング基礎編 第2版です。  ↑ ・この本より次の本をお勧めします。  http://www.amazon.co.jp/dp/4274063372/→『C言語によるプログラミング―スーパーリファレンス編』  基礎編に載っていないものが載っています。  応用編もありますが買うとしたら上の本でしょう。  もちろん今後の参考として下さい。 ・以上。

参考URL:
http://www.amazon.co.jp/dp/4274063372/
Balzary
質問者

補足

Cygwinをインストールするようにといわれたのですが、うまくインストールすることができません。Vistaにはインストールできないのでしょうか?Cドライブの容量なども関係していますか?ちなみに2.5GBぐらいしか残っていません。

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.6

ctype.hはC言語の標準ライブラリのヘッダです。 http://ja.wikipedia.org/wiki/%E6%A8%99%E6%BA%96C%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA 「C言語によるプログラミング基礎編」にある問題や学校の課題を解いている状況で、ctype.hの標準ライブラリが説明されていないのであれば、使わずに小文字大文字変換をしたほうが良いと思います。 文字コードは、以下のホームページにあります。 http://e-words.jp/p/r-ascii.html a~zの範囲の値だったら、Aとの差分を計算するだけのなので、toupper()関数の代わりにif文と引き算で値を変換することができます。 「C言語によるプログラミング基礎編」の8章が終わっていればできると思います。できなければ、8章までを読み直してみましょう。

Balzary
質問者

お礼

ありがとうございます。「C言語によるプログラミング基礎編」の8章までを読みなおしてみます。

Balzary
質問者

補足

/* 小文字を大文字に */ void convc(char c) { if( c >= 'a' && c <= 'z' ) return c - ('a' - 'A'); else return c; } 調べながら、このようにやってみたのですが、合っているでしょうか? 後、return c - ('a' - 'A'); の意味がわかりません。

回答No.5

> ちなみにこれは参考書などでは、どの章に書いてあるんですか? "これ"とはどれを指しているのでしょうか? toupperでしたら"さくいん"でも探してください。 あなたがどんな参考書をお使いか知る由もありません。

Balzary
質問者

補足

すみません。 #include <ctype.h>の<ctype.h>です。 void capitalizeの capitalize は自分でつくれる関数ですよね? touperは載っていませんでした。 ちなみに使っている参考書は、C言語によるプログラミング基礎編 第2版です。

回答No.4

> 解説をしていただけないでしょうか? void capitalize(char* s) {   while ( *s ) { /* *s が'\0'でない間 */    *s = toupper(*s); /* 小文字を大文字に書き換えて */    ++s; /* 次へ */   } }

Balzary
質問者

補足

ありがとうございます。ちなみにこれは参考書などでは、どの章に書いてあるんですか?

  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.2

ご自分の力ではどこまでできますか? 可能であれば、途中経過でかまいませんので ソースコードを提示してください。

Balzary
質問者

補足

ソースコードは学校のパソコンにあるので、今は見せることができません。すいません。文字列を読み込む所まではできています。

回答No.1

- ファイルから文字列を読み込む - 文字列中の小文字を大文字にする わからないのはどちらですか?

Balzary
質問者

補足

わからないのは、文字列中の小文字を大文字にするです。

関連するQ&A