電子書籍の厳選無料作品が豊富!

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

A 回答 (9件)

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



#include <ctype.h>

void capitalize(char* s) {
  while ( *s ) {
   *s = toupper(*s);
   ++s;
  }
}

この回答への補足

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

補足日時:2007/07/08 18:04
    • good
    • 0

vista にcygwinを導入するときに問題が出ている人はそれなりにいるようです。


一応対応はすんでいるはずなのですが。

MMBT~マグロの 目の ぶよぶよした ところ ~ : Cygwin + Vista
http://gaks.exblog.jp/7058265/

Cygwinのインストール(Windows Vista)
http://www.twcu.ac.jp/~osada/comp2a/cygwin-vista …

とりあえず、setup.exe を起動してから X 関連ははずし、
開発ツール(gccなどがあるところ)をチェックするなどして
ダウンロードの対象を絞っておくと良いかもしれません。
    • good
    • 0

#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程度です。
どんな状況か説明してもらえるとフォローできるかもしれません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/07/10 19:14

★他の回答者の『この回答への補足』より。


>わからないのは、文字列中の小文字を大文字にするです。
 ↑
 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/

この回答への補足

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

補足日時:2007/07/10 00:16
    • good
    • 0

ctype.hはC言語の標準ライブラリのヘッダです。


http://ja.wikipedia.org/wiki/%E6%A8%99%E6%BA%96C …

「C言語によるプログラミング基礎編」にある問題や学校の課題を解いている状況で、ctype.hの標準ライブラリが説明されていないのであれば、使わずに小文字大文字変換をしたほうが良いと思います。

文字コードは、以下のホームページにあります。
http://e-words.jp/p/r-ascii.html
a~zの範囲の値だったら、Aとの差分を計算するだけのなので、toupper()関数の代わりにif文と引き算で値を変換することができます。
「C言語によるプログラミング基礎編」の8章が終わっていればできると思います。できなければ、8章までを読み直してみましょう。

この回答への補足

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

補足日時:2007/07/10 00:15
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/07/08 23:12

> ちなみにこれは参考書などでは、どの章に書いてあるんですか?



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

この回答への補足

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

補足日時:2007/07/08 20:05
    • good
    • 0

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



void capitalize(char* s) {
  while ( *s ) { /* *s が'\0'でない間 */
   *s = toupper(*s); /* 小文字を大文字に書き換えて */
   ++s; /* 次へ */
  }
}

この回答への補足

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

補足日時:2007/07/08 18:54
    • good
    • 0

ご自分の力ではどこまでできますか?


可能であれば、途中経過でかまいませんので
ソースコードを提示してください。

この回答への補足

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

補足日時:2007/07/08 16:19
    • good
    • 0

- ファイルから文字列を読み込む


- 文字列中の小文字を大文字にする
わからないのはどちらですか?

この回答への補足

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

補足日時:2007/07/08 16:16
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!