C言語なら、俺に聞け! <14>

このエントリーをはてなブックマークに追加
952初心者1:02/03/19 00:42
ごめんなさい間違いました。
Cのコメントを除去するプログラムを
Cの文法で教えてください。
953初心者1 :02/03/19 00:48
裸の版ていうのは

while(まだ行がある)
if(コメント開始文字列がある)
除去除去

....?なんか違うかな・・・(-_-)
954デフォルトの名無しさん:02/03/19 00:50
ある文字列の中で、複数文字列からなるデリミッタの位置を返す関数を考えてるん
だけど、単一文字デリミッタならいけるんだけど、複数文字列だと配列に順番に
シフトしながら入れていって比較を繰り返すという感じにするしかないんでしょうか?
もうちょっとエレガントで少ないコード行でできませんかね?
>>954
strstr()じゃだめ?
956デフォルトの名無しさん:02/03/19 01:08
>952
コメント除去はスチャラカでいいなら

1行をバッファに読み込む
そのバッファを一文字づつ読んでいってホワイトスペース、/*の並びをコメント開始
としてコメント終了の*/まで読み飛ばす。

でいいでしょう。でも複数行にわたったコメントとか文字列中の/*を見つけたときに
きちんと対応させようとすると結構やっかいです。とりあえず裸と言うことだから
上の仕様で書いてみたら。

>954
strstr使ったらうまくいきそうに思えるけど。デリミタのポインタが返ってくるんじゃないの?
>>955
>>956
ライブラリでそういう関数が既にあるんですね。
自分で作ろうとしてました。どうもです。
958ビル・ジョブス:02/03/19 01:18
>>957
ANSI/UNICODEに気を付けて。
ビルはいわゆるEUCとかEBCDICは気をつけなくていい環境なんだね(藁
960デフォルトの名無しさん:02/03/19 11:57
なるほどねぇ
961デフォルトの名無しさん:02/03/19 12:15
>>948
「除去」って言葉が曖昧なんだけど、
コメントだけを表示するプログラム作ってみた。
参考にシル。


#include <stdio.h>

#define OUT 0
#define IN 1

#define BUFSIZE 8

int buffer[BUFSIZE];
int buffer_ptr = 0;

int getch(void);
void ungetch(int);

- つづく -
962デフォルトの名無しさん:02/03/19 12:16

- つづき -

int main(void){

    int c, d;
    int state = OUT;

    while((c = getch()) != EOF){

        if(state == IN && c == '*'){
            if((d = getch()) == '/'){
                putchar(c);
                putchar(d);
                putchar('\n');
                state = OUT;
                continue;
            }else{
                ungetch(d);
            }
        }

        if(state == OUT && c == '/'){
            if((d = getch()) == '*'){
                putchar(c);
                putchar(d);
                state = IN;
                continue;
            }else{
                ungetch(d);
            }
        }

        if(state == IN){
            putchar(c);
        }else{
            continue;
        }
    }

    return 0;
}

- つづく -
963デフォルトの名無しさん:02/03/19 12:17
- つづき -

int getch(void){
    int c;

    if(buffer_ptr <= 0){
        c = getchar();
    }else{
        c = buffer[buffer_ptr];
        --buffer_ptr;
    }
    return c;
}

void ungetch(int c){
    if(buffer_ptr <= BUFSIZE - 1){
        buffer[buffer_ptr] = c;
        ++buffer_ptr;
    }else{
        fprintf(stderr, "Error: buffer full\n");
        exit(1);
    }
}

課題は自分でとくことに意味があると思うぞ。
964デフォルトの名無しさん:02/03/19 12:23
新スレは?
965961 - 963:02/03/19 12:25
コードがべたでスマソ。
間違ってたら誰かなおしといてクリ。

ところで次スレはどこ?
C言語なら、俺に聞いてくれませんか?==15;
名前: デフォルトの名無しさん
E-mail: sage
内容:
先人のお言葉。
漏れは38才、21年間プログラムを一生懸命作ってきた。
いろいろな言語を極めたが、一番手になじむのはCだった。
Cのことなら全てわかるから、疑問な点があったら漏れに聞け。

だが、いちいちFAQに載った質問に応えるほど暇じゃない。
課題丸投げなら別スレにいけ。

・comp.lang.c Frequently Asked Questions
http://www.eskimo.com/~scs/C-faq/top.html

・C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html

Cプログラマならこれを買っとけ。
・プログラミング言語C(K&Rと呼べば通だ)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/yfcbookshelf-22/250-3950205-1475419

K&Rで挫折するようなヤツはこれでも買え。
これでわからない、救いがたいヤツはあきらめろ。
・作ってわかるCプログラミング(アヒル本と呼べば通だ)
http://dennou.gihyo.co.jp/books/void_c/
http://www.amazon.co.jp/exec/obidos/ASIN/477411328X/qid%3D1005618315/250-3950205-1475419

・前スレ C言語なら、俺に聞け! <14>
http://pc.2ch.net/test/read.cgi/tech/1015286974/l50

967デフォルトの名無しさん:02/03/19 12:48
> K&Rで挫折するようなヤツはこれでも買え。
> これでわからない、救いがたいヤツはあきらめろ。
> ・作ってわかるCプログラミング(アヒル本と呼べば通だ)
> http://dennou.gihyo.co.jp/books/void_c/
> http://www.amazon.co.jp/exec/obidos/ASIN/477411328X/qid%3D1005618315/250-3950205-1475419

いいかげん、これはいらないだろ。
かわりに、こっち載せといたら。

推薦図書/必読書のためのスレッド PART2
http://pc.2ch.net/test/read.cgi/tech/1010312992/l50

毒が足りないか。(W
文字列定数に含まれた /* */ はスキップしないのか?
ぜんて、がいい
>C言語なら、俺に聞いてくれませんか?==15;

腰が低いのはイヤだな。なんとなく。
C言語なら私におまかせ♪+=15;

媚びてみるというのは?
972デフォルトの名無しさん:02/03/19 13:30
>>971
ネカマっぽい 藁
973デフォルトの名無しさん:02/03/19 13:58
C言語なら、他に聞け! <15>
>>973
(あかんやん・・・。> Σ(`ヾ)<
975デフォルトの名無しさん:02/03/19 14:07
ハンドルされてない例外って何ですか?
>>975
catchされてない例外。
977デフォルトの名無しさん:02/03/19 14:33
すいません・・・
catchってなんですか?
978デフォルトの名無しさん:02/03/19 14:39
WindowsXPにVC++を使っているのですがC言語でHTMLのタグなどの他言語の命令文などはどうやって取得するのでしょうか?
たとえばHTMLなら<a href="URL">飛んでけ</a>や<br>
などというものなどの場合?
979デフォルトの名無しさん:02/03/19 14:42
HTMLのタグの話しなら、
XMLやHTMLのタグを解釈するライブラリを探して使え。
それがなければ構文解析をするプログラムをCで書け。
981デフォルトの名無しさん:02/03/19 14:47
>>978
parser を作る。
>>978
「IEコンポーネントを使い倒すスレ」ってのがあったな。
>>982
IEコンポーネントを使い倒すスレ
http://pc.2ch.net/test/read.cgi/tech/982930049/
>>978
取得した後に何をやるのかがわからなければなんともいえない。
985978:02/03/19 14:54
IEコンポーネントを見てみます
わざわざありがとうございます
986973:02/03/19 15:01
C言語だけなら、俺に聞け! <15>
C言語っぽく俺に聞け! <15>
C言語なら、俺が聞く! <15>
C言語なら、俺を見ろ! <15>
C言語から俺が逝く! <15>

そろそろ番号がきびしくないか。
そろそろ日下部はやめようぜ。
それにしても2週間でスレ一つ使うとはかなり人の多いスレですね。
989デフォルトの名無しさん:02/03/19 15:09
漏れ的には Dennis Ritchie がいいな。
残り10になッても誰もスレ立てようとしないのが
このスレのいい加減さを表してていい(藁
>>990
失敗しましたがなにか?
プログラミング作法・ハーニンハン博士
( ;´Д`)
新スレ勃てたよ。

C言語なら、俺に聞け! <15>
http://pc.2ch.net/test/read.cgi/tech/1016519243/l50
>>993
おつかれー
わーいわーい、ぜんてだぜんて!
996女性雑誌にも載ってるよ♪:02/03/19 15:32

女性雑誌 (;´Д`) ハアハア
999デフォルトの名無しさん:02/03/19 16:16
後1…
1000デフォルトの名無しさん:02/03/19 16:18
1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。