正規表現

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
るい

正規表現

#1

投稿記事 by るい » 15年前

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

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

box

Re:正規表現

#2

投稿記事 by box » 15年前

念のためにお聞きします。

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

これは、

変更前:p
変更後:54862057

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

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

これは、

変更前:p
変更後:aegaokdai

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

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

るい

Re:正規表現

#3

投稿記事 by るい » 15年前

すみません。
ちょっと言い方が悪かったかもしれません。

入力された文字列が
「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

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

Ma

Re:正規表現

#4

投稿記事 by Ma » 15年前

C++ なら std::string に replace 関数があります。
C言語ならループ等使って自力で計算するしかないんじゃないかな。

なっきー

Re:正規表現

#5

投稿記事 by なっきー » 15年前

>変更前: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がなく携帯から書き込みしてるのでテストはしてません…

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

dic

Re:正規表現

#6

投稿記事 by dic » 15年前

「正規表現」
http://ja.wikipedia.org/wiki/%E6%AD%A3% ... 8%E7%8F%BE

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

hoge

Re:正規表現

#7

投稿記事 by hoge » 15年前

標準関数に正規表現はありません。
本当に正規表現が必要なら、非標準のライブラリを使うか
自分で正規表現処理プログラムを作る必要があります。

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

閉鎖

“C言語何でも質問掲示板” へ戻る