Monoプロジェクトの公式発表ではないが、その主導者であるミゲル・デ・イカザ氏の言葉として、
「Cでプログラミングするには人生は短すぎる」という標語が掲げられている。
http://bit.ly/fJCXb0
探検
「Cでプログラミングするには人生は短すぎる」か?
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2011/02/01(火) 00:02:54165デフォルトの名無しさん
2011/02/16(水) 18:20:18 >>163 クソコードだけど。
#include <stdio.h>
#include <stdlib.h>
#include <regex.h>
#define BUFSIZE 1024
#define NUMBER_OF_BRANKETS 10 /* 0の方が高速 */
/*
*dst : 置換後の文字列を書き込む領域確保済みのバッファ
*src : 置換前の文字列
*st_string : 置き換える文字列
re : コンパイル済み正規表現
*/
int replace(unsigned char *dst,
const unsigned char *src, unsigned char *st_string, regex_t re);
main()
{
regex_t re; /* 正規表現コンパイル結果を格納する構造体 */
unsigned char *re_string = "[0-9]+"; /* 正規表現 */
unsigned char *st_string = "[number]"; /* 置換後の文字列 */
unsigned char *dst, *src, *emsg;
unsigned int ecode; /* エラーコード */
/* 正規表現をコンパイルする */
if(0 < (ecode = regcomp(&re, re_string, REG_EXTENDED))){
// コンパイル失敗時はエラーメッセージを出して終了
emsg = malloc(BUFSIZE);
regerror(ecode, &re, emsg, BUFSIZE);
fprintf(stderr, "%s\n", emsg);
#include <stdio.h>
#include <stdlib.h>
#include <regex.h>
#define BUFSIZE 1024
#define NUMBER_OF_BRANKETS 10 /* 0の方が高速 */
/*
*dst : 置換後の文字列を書き込む領域確保済みのバッファ
*src : 置換前の文字列
*st_string : 置き換える文字列
re : コンパイル済み正規表現
*/
int replace(unsigned char *dst,
const unsigned char *src, unsigned char *st_string, regex_t re);
main()
{
regex_t re; /* 正規表現コンパイル結果を格納する構造体 */
unsigned char *re_string = "[0-9]+"; /* 正規表現 */
unsigned char *st_string = "[number]"; /* 置換後の文字列 */
unsigned char *dst, *src, *emsg;
unsigned int ecode; /* エラーコード */
/* 正規表現をコンパイルする */
if(0 < (ecode = regcomp(&re, re_string, REG_EXTENDED))){
// コンパイル失敗時はエラーメッセージを出して終了
emsg = malloc(BUFSIZE);
regerror(ecode, &re, emsg, BUFSIZE);
fprintf(stderr, "%s\n", emsg);
166デフォルトの名無しさん
2011/02/16(水) 18:21:03 fprintf(stderr, "%s\n", emsg);
free(emsg);
exit(-1);
}
/* メモリーを取得 */
src = malloc(BUFSIZE);
dst = malloc(BUFSIZE);
while(!feof(stdin)){
/* 標準入力から1行入力 */
if(NULL==fgets(src, BUFSIZE, stdin))
continue;
/* 置換を実行 */
replace(dst, src, st_string, re);
/* 置換した文字列を標準出力へ出力 */
printf("%s", dst);
}
/* メモリーを開放 */
free(src);
free(dst);
/* 構造体を開放 */
regfree(&re);
return 0;
}
free(emsg);
exit(-1);
}
/* メモリーを取得 */
src = malloc(BUFSIZE);
dst = malloc(BUFSIZE);
while(!feof(stdin)){
/* 標準入力から1行入力 */
if(NULL==fgets(src, BUFSIZE, stdin))
continue;
/* 置換を実行 */
replace(dst, src, st_string, re);
/* 置換した文字列を標準出力へ出力 */
printf("%s", dst);
}
/* メモリーを開放 */
free(src);
free(dst);
/* 構造体を開放 */
regfree(&re);
return 0;
}
167デフォルトの名無しさん
2011/02/16(水) 18:21:46 int replace(unsigned char *dst,
const unsigned char *src, unsigned char *st_string, regex_t re)
{
unsigned char *p, *q;
unsigned int i; /* 入力文字列のための添字 */
regmatch_t *pmatch = NULL; /* 一致データの格納先 */
unsigned int ecode; /* エラーコード */
pmatch = calloc(NUMBER_OF_BRANKETS + 1, sizeof(regmatch_t));
/* パターン・マッチング */
if(REG_NOMATCH == (ecode = regexec(&re, src, NUMBER_OF_BRANKETS + 1, pmatch, 0))){
pmatch[0].rm_so = -1;
}
/* 置換処理用のポインターをセット */
q = dst; i=0;
/* コピーと置換処理 */
while('\0' != src[i]){
/* 正規表現とマッチする位置に来たときの処理 */
/* pmatch[0]が一致文字列全体、pmatch[1]以降が括弧内の部分一致部分の情報 */
if(i == pmatch[0].rm_so){
/* q - dst < BUFSIZE - 2 はバッファー・オーバーフロー対策 */
for(p = st_string; '\0'!=*p && q - dst < BUFSIZE - 2; p++){
*q++ = *p;
}
/* 入力文字列の文字位置を表す添字に加算 */
i += pmatch[0].rm_eo - pmatch[0].rm_so;
/* 再帰でグローバル・マッチングにする */
q += replace(q, src + i, st_string, re);
/* 再帰先で処理が終了しているのでループを抜ける */
break;
const unsigned char *src, unsigned char *st_string, regex_t re)
{
unsigned char *p, *q;
unsigned int i; /* 入力文字列のための添字 */
regmatch_t *pmatch = NULL; /* 一致データの格納先 */
unsigned int ecode; /* エラーコード */
pmatch = calloc(NUMBER_OF_BRANKETS + 1, sizeof(regmatch_t));
/* パターン・マッチング */
if(REG_NOMATCH == (ecode = regexec(&re, src, NUMBER_OF_BRANKETS + 1, pmatch, 0))){
pmatch[0].rm_so = -1;
}
/* 置換処理用のポインターをセット */
q = dst; i=0;
/* コピーと置換処理 */
while('\0' != src[i]){
/* 正規表現とマッチする位置に来たときの処理 */
/* pmatch[0]が一致文字列全体、pmatch[1]以降が括弧内の部分一致部分の情報 */
if(i == pmatch[0].rm_so){
/* q - dst < BUFSIZE - 2 はバッファー・オーバーフロー対策 */
for(p = st_string; '\0'!=*p && q - dst < BUFSIZE - 2; p++){
*q++ = *p;
}
/* 入力文字列の文字位置を表す添字に加算 */
i += pmatch[0].rm_eo - pmatch[0].rm_so;
/* 再帰でグローバル・マッチングにする */
q += replace(q, src + i, st_string, re);
/* 再帰先で処理が終了しているのでループを抜ける */
break;
168デフォルトの名無しさん
2011/02/16(水) 18:22:30 } else if(q - dst < BUFSIZE - 2){
/* 1文字コピー */
*q++ = src[i++];
}
}
/* NULL文字をつけ足す */
*q = '\0';
free(pmatch);
/* 置換後の文字数を戻す */
return q - dst;
}
http://uncorrelated.no-ip.com/20101023.shtml からコピペ
/* 1文字コピー */
*q++ = src[i++];
}
}
/* NULL文字をつけ足す */
*q = '\0';
free(pmatch);
/* 置換後の文字数を戻す */
return q - dst;
}
http://uncorrelated.no-ip.com/20101023.shtml からコピペ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国・ロシア両軍の爆撃機が東京方面へ向かう「異例のルート」を共同飛行…核も搭載可能、連携して威嚇か ★8 [ぐれ★]
- 【速報】「女芸人No.1決定戦 THE W」9代目女王にニッチェ! 7年ぶり3度目で悲願の優勝 [牛丼★]
- 「おこめ券は米以外の食品も買える。効果的な活用を」 地元で農水相 [山形県] [少考さん★]
- 【芸能】『女芸人No.1決定戦THE W』 粗品が最後にバッサリ「優勝賞金1000万円にしてはレベル低い大会」 [冬月記者★]
- 今年の流行語大賞 『働いて働いて働いてまいります』が受賞で不快感… 過労自殺の遺族らが会見「家族にむち打つような行為だ」 [冬月記者★]
- いじめ後遺症 15年前のトラウマに苦悩する当事者「夢の中に出てくる」「された側は一生ものの傷」 [♪♪♪★]
- 【実況】博衣こよりのえちえちダンガンロンパ6🧪
- 【実況】博衣こよりのえちえちダンガンロンパ5🧪
- マイナンバー更新、申請書が届くまでに一ヶ月。そして受付予約枠は2ヶ月先まで埋まってる...どうなってんだこの国 [237216734]
- 🏡パン🍞つー✌まる👌見え👊😅👊
- ぶっちゃけ口が臭そうな女性芸能人WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
- 実写映画「ストリートファイター」のキャラアートが公開。何か知らん人がいる…… [624898991]
