解決済みの質問
簡易grepコマンドの作成を自作プログラムで作りたいのですが……
C言語でです。
C++ではなぃです。
できれば初心者が考えるよぉなプログラムで。
またコメントみたぃにプログラムの意味も詳しくわかりやすくあると助かります。
コンパイルは
./mygrep 検索するもの ディレクトリ/ファイル名
だった気がします。
mygrepはプログラム名です。
おねがぃします。
投稿日時 - 2010-01-03 15:59:28
0人が「このQ&Aが役に立った」と投票しています
ベストアンサー以外の回答(4件中 1~4件目)
#4さんが言われているように、実現するにはかなりの力量が要ります。
以下に、チョー簡単なプログラムを示しますが、使い方はターミナルのシェルプロンプトから
mygrep<data_file '234'
という風にリダイレクトを用いた入力としてください。このコマンドの実現は、strstr()関数から得られるものです。
なお。data_fileは↓のような1行の内容のファイルを用意し、
123456789abcdef
引数に '345' とか '543' を用いて起動すれば取り合えずの grep が体験できるでしょう。
このサンプルプログラムから
1.プロトタイプ宣言の書き方
2.引数の取り方と解析の仕方
3.ファイルの読み方
4.エラー処理の仕方
5.文字列(バイト列)処理の仕方
などを学んで欲しいものです。
/* mygrep command by Mac OSX
* file name: 5133.c
* compile: gcc 5133.c -o mygep
* execution: mygrep<△△ファイル '○○○'
*/
#include <stdio.h>
#include <string.h>
#define MEM_SIZE 512
char
buf[MEM_SIZE],
*key;
int chkarg(int, char **);
int main(int argc, char *argv[]) {
char *p;
int n;
/* 引数解析 */
if (chkarg(argc, argv) != 0) {
fprintf(stderr, "Parameter error?n");
return 0;
}
/* メインプログラム */
fgets(buf, MEM_SIZE, stdin);
while(!feof(stdin)) {
p = strstr(buf, key);
if (p != NULL)
//printf("%s", buf);
printf("%s", p, key);
else
; //何もしない
fgets(buf, MEM_SIZE, stdin);
}
return 0;
}
int chkarg(int argc, char *argv[]) {
if (argc != 2)
return -1;
else {
key = argv[--argc];
return 0;
}
}
投稿日時 - 2010-01-03 22:44:43
で、何がわからないんでしょうか?
>できれば初心者が考えるよぉなプログラムで。
回答を課題の結果として提出するから…ですか?
高度(?)なものだと、先生にバレる…とか。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char cmd[100];
sprintf(cmd, "grep %s %s", argv[1], argv[2]);
return system(cmd);
}
投稿日時 - 2010-01-03 16:20:01
補足
質問はgrepコマンドを自作でつくることです。
コマンドラインから取得なので…
あとcmdの使い方はまだよくわかりません(泣)
あと課題は課題です。
ですが初心者というのは、
ほんとに初心者だからです。
すぃません。
みなさんならどんな自作プログラムを考えれるのかと思い、
質問をしています。
プログラムを提示が一番うれしぃですが
どんな考え方をするのかだけでもかまいません。
すぃません、お願いします。
投稿日時 - 2010-01-03 17:03:24
OKWaveのオススメ
おすすめリンク