ページ 11

正規表現

Posted: 2010年4月24日(土) 17:43
by るい
C言語の標準関数に正規表現はないですよね?
たとえば
char moji[1024];
scanf("%s",&moji);
このようなソースがあったとして
「変更前:p」このように入力したとします。
そこでこのpという文字(または文字列にも対応)を
適当な文字列に置き換えたいのです。
(例1)「変更後:54862057」
(例2)「変更後:aegaokdai」

このような正規表現はどのように作成すればよろしいのでしょうか?

Re:正規表現

Posted: 2010年4月24日(土) 22:47
by box
念のためにお聞きします。

> (例1)「変更後:54862057」

これは、

変更前:p
変更後:54862057

という結果を想定されているのですか?
また、

> (例2)「変更後:aegaokdai」

これは、

変更前:p
変更後:aegaokdai

という結果を想定されているのですか?

だとすると、いずれの例も正規表現とは関係ないように見えるのですけれど…。

Re:正規表現

Posted: 2010年4月24日(土) 22:59
by るい
すみません。
ちょっと言い方が悪かったかもしれません。

入力された文字列が
「abc!def」だったとします。
こうすると
moji[0] => a
moji[1] => b
moji[2] => c
moji[3] => !
moji[4] => d
moji[5] => e
moji[6] => f
となりますよね?
それで入力された文字列の中の「!」だけを
指定した文字列に変更したいのです。

変更前:abc!def
変更後:abc54862057def

こういうのって正規表現の置き換えって言うんですよね?

Re:正規表現

Posted: 2010年4月25日(日) 01:35
by Ma
C++ なら std::string に replace 関数があります。
C言語ならループ等使って自力で計算するしかないんじゃないかな。

Re:正規表現

Posted: 2010年4月25日(日) 07:08
by なっきー
>変更前:abc!def
>変更後:abc54862057def
こういう処理だけなら

int i,x,y;
char array[256],view[256];
char array2[3][256];
scanf("%s",&array);
x = 0;
y = 0;
for(i=0; i<strlen(array); i++) {
if(array != '!') {
array2[x][y] = array;
y++;
} else {
x++;
y = 0;
}
}
sprintf(view,"%s54862057%s",array2[0],array2[1]);
printf("変更前:%s\n",array);
printf("変更後:%s\n",view);

こんな感じで出来ると思います。
いま出先でPCがなく携帯から書き込みしてるのでテストはしてません…

もし私にミスがあったら申し訳ありません。
教えてください。

Re:正規表現

Posted: 2010年4月25日(日) 18:23
by dic
「正規表現」
http://ja.wikipedia.org/wiki/%E6%AD%A3% ... 8%E7%8F%BE

>それで入力された文字列の中の「!」だけを
>指定した文字列に変更したいのです。
それだけだと置換ですね

Re:正規表現

Posted: 2010年4月29日(木) 22:15
by hoge
標準関数に正規表現はありません。
本当に正規表現が必要なら、非標準のライブラリを使うか
自分で正規表現処理プログラムを作る必要があります。

ただ、他の人が書いているように一文字を置換するだけなら正規表現は必要ありません。
Cの場合、元の文字列より変換後文字列が長くなるような変換はバッファの取り回しに気をつけなければならないでしょう。