- ベストアンサー
入力されたテキスト行の中で最も長い行を表示するプログラム
- 入力されたテキスト行の中で最も長い行を表示するプログラムのコードを作成します。
- プログラムのメイン関数で、入力されたテキスト行を取得し、最も長い行の長さを記録します。次に、入力の終わりまで繰り返し、行の長さがこれまでの最長行よりも長い場合、最長行の内容を更新します。最後に、最も長い行を表示します。
- getl関数は、入力から一行を取得し、その長さを返す関数です。copy関数は、文字列をコピーする関数です。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#include <stdio.h> #define MAXLINE 1000 int getl(char s[] , int lim) { int i; if(!fgets(s, lim, stdin)){ s[0] = '\0'; return -1; } for(i = 0; s[i] != '\n' && s[i] != '\0'; i ++) ; s[i] = '\0'; return i; } void copy(const char from[], char to[] ) { do{*to ++ = *from;}while(*from ++ != '\0'); } int main(void) { int len; int max; char line[MAXLINE]; char longest[MAXLINE]; for(max = 0; (len = getl(line, MAXLINE)) != -1; ){ if(len > max){ max = len; copy(line, longest); } } printf("%d %s\n", max, longest); return 0; }
その他の回答 (3)
- Oh-Orange
- ベストアンサー率63% (854/1345)
★main() 関数一本で作ってみました。 ・これを元に穴埋めの『getl』や『copy』関数を完成させて下さい。 『copy』関数は最後に NULL 文字を追加しないとまずい気がしますけど。いいの? 『getl』関数は自分で fgets() 関数と同じものを作ればよいだけです。 ・テストするときは標準関数の fgets() と同じ結果になるか調べましょう。 『getl』関数には第3引数はありませんが第1引数、第2引数は同じです。 サンプル: int main( void ) { char save[ 256 ]; char buff[ 256 ]; int max = -1; int len; // コンソールから入力 while ( fgets(buff,sizeof(buff),stdin) != NULL ){ len = strlen( buff ); if ( len > max ){ max = len; strcpy( save, buff ); } } // 結果表示 printf( "%d: %s", max, save ); return 0; } その他: ・『getl』関数は内部で getchar() とか、getc()、fgetc()、getch()、getche() などで 1文字を第1引数『char s[]』に入れていけばよい。だたし第2引数の『int lim』を 越えない文字数を入れます。また文字列の最後の NULL 文字分を引いた文字数をセット するようにも心がけましょう。あと EOF や \n にも注意。 ・以上。
- maku_x
- ベストアンサー率44% (164/371)
ちなみに標準関数を使ってはいけないのでしょうか? 標準関数を使えるなら、fopen()、fgets()、strlen()、strcpy()、fclose() 辺りを使えば簡単に書くことができますが。標準関数を使ってはいけないのであれば、それでもとりあえず標準関数を使ってプログラムを書き、動作確認をしてから標準関数に相当する関数を、自前で実装するのが手堅いです。それぞれの関数の詳細は、man コマンドでマニュアルを引くか、使えなければ参考URLで検索してみてください。
- 参考URL:
- http://www.linux.or.jp/JM/
- sakusaker7
- ベストアンサー率62% (800/1280)
> mainの***************部 質問文のどこにあります? あとこの質問、Yahoo!知恵袋にもポストしてますね。
補足
#include <stdio.h> #define MAXLINE 1000 int getl(char s[] , int lim) { } void copy(char to[], char from[] ) { int i; i= 0; while((to[i] = from[i]) ! = ‘\0’) ++i; } int main() { int len; int max; char line[MAXLINE]; char longest[MAXLINE]; max = 0; while((len = getl(line , MAXLINE)) > 0) if (len > max) { *************************** } if (max > 0) printf(“%d: %s” , max, longest); return (0); } すみません!これです>< 切羽詰っていたもので。。。