- ベストアンサー
ファイルからの変換
c言語初心者です。 あらかじめファイルを作っておいて その中に小文字でvffjfと入れておきます。 それを読み取り大文字に変えファイルに表示させるプログラムをつくりたいのですが、 toupperの使い方や、変換させてまた再度入力させるには どのようなものが必要ですか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
toupperの使い方はこれでわかりますでしょうか? ------------------------------ #include <stdio.h> #include <ctype.h> //←これ必須 int main() { char *str = "vffjf"; char *wk; for (wk = str; *wk; wk++) { *wk = toupper(*wk); } printf("str: %s\n", str); return 0; } ------------------------------ これで大文字に変換した文字列が取得できますので、 元のファイルに上書きしてやればOKです。
その他の回答 (3)
- toda hiro(@hiro_knigh)
- ベストアンサー率39% (59/151)
>char toupper(char fp); まず、上記は何の為に記載されているのでしゅうか? 違うファイルに書き込んでよいと言うことであれば、私なら以下のプログラムにします。 #include <stdio.h> #include <ctype.h> int main() { FILE *fpi,*fpo; int cnt = 0; char buf[1024] = ""; fpi = fopen("bigban.txt", "r"); if(fpi == NULL ) { printf("入力ファイルをオープンできません。\n"); return 0; } fpo = fopen("bigban2.txt", "w"); if(fpo == NULL ) { printf("出力ファイルをオープンできません。\n"); fclose(fpi); return 0; } while(fgets(buf,1024,fpi) != NULL) { for(cnt = 0; buf[cnt] != '\0' ; cnt++) { buf[cnt] = toupper(buf[cnt]); } fprintf(fpo,"%s",buf); } fclose(fpi); fclose(fpo); }
お礼
ご親切にどうもありがとうございました。 なんとかやってみます。
- SilverThaw
- ベストアンサー率32% (260/806)
>なにがだめなのか指摘していただけませんか? 個々の関数の機能を理解するところからはじめてください。 ファイルの開き方が違います。 >if((fp = fopen("bigban", "r")) == NULL ) この設定ではファイルは「読み取り専用」です。書き込むことはできません。 読み書きによる「ファイルポインタ」の位置を理解してください。 ファイルを開いた直後は、ファイルポインタは先頭(一文字目)にいます。 一文字読んだ場合、ファイルポインタは「二文字目」の位置に移動します。 この状態のファイルポインタを使用して書き込みを行えばデータは「二文字目」に書かれます。 seek()のようなファイルポインタを移動する関数を使用しで書く位置を変更する必要があります。 ところで、課題は同じファイルを更新するのでしょうか?
補足
課題は同じファイルですよ。 個々の関数の機能いがいまいち理解できてないのでもう一度勉強してみます。
- yone_sk
- ベストアンサー率34% (58/167)
・小文字 → 大文字 変換 こちらが参考になると思います。 http://www1.cts.ne.jp/~clab/hsample/Point/Point11.html > 変換させてまた再度入力させる これはどういうことでしょうか?
補足
もともと小文字の英語の配列があるファイルから、プログラムにより読み出してから、それを大文字に変換してファイルに大文字の英語の配列として残したいということです。 何か複雑な気がしてtoupperがうまくつかえません
補足
なんとなくはわかるのですが、私はこんな感じでできないんですが、 なにがだめなのか指摘していただけませんか? #include<stdio.h> #include <ctype.h> int main() { FILE *fp; char big = 0; char bit = 0; char toupper(char fp); if((fp = fopen("bigban", "r")) == NULL ) { printf("\nファイgルをオープンできません。/n"); } else { while((bit = fgetc(fp)) != EOF) big = toupper(bit); fprintf(fp,"%s",big); return 0; } fclose(fp); } この場合bigbanに小文字で英語の配列が入っていて、それをこのプログラムで大文字に書き換えようとしてるのですが、、、 まったくだめです。。。