fc2ブログ
GEEKy Script Writer [perl and more!]
You should permit the JavaScript!!
マッチしたやつを置き換える
mixiのC言語とC++言語コミュを覗いてたら僕にもできそうなのが質問として投げ出されていた

はじめまして。
どうしてもわからないC言語の課題があるので質問させていただきます。
―課題―
文字列と照合したいパターン文字列をそれぞれchar型配列sとpに読み込み、関数ptnmchを利用して、文字列sにおいてパターンpと一致する部分を全て*で置き換えて出力するプログラムを作成しなさい。
つまり、shinzoshin zoshinzoと入力して、照合したい文字列がshinzoの場合、
    ******shin zo******
となりたいのです。
よろしくお願い致します。


バグつぶし含め20分ぐらいでかいてみた


#include <stdio.h>
#include <string.h>

int ptnmch(char*,char*);
void str_replace(char*,int,int,char);

int main(int argc,char **argv){
int i = 0;
char hoge[] = ".c";
while(i < argc){
if(ptnmch(argv[i],hoge)){
printf("OK -> %s\n",argv[i]);
}else{
printf("NG -> %s\n",argv[i]);
}
i++;
}
return 0;
}

int ptnmch(char *p,char *s){
int matchflag = 0;
int flag = 0;
int i = strlen(s);
int m = 0;
int l = 0;
while(p[m] != '\0'){
if(p[m] == s[0]){
l = 0;
flag = 1;
while(++l < i){
if(p[m+l] != s[l]){
flag = 0;
break;
}
}
if(flag){
matchflag = 1;
str_replace(p,m,m+i,'*');
}
}
m++;
}
return matchflag;
}

void str_replace(char *str,int s_n,int e_n,char r){
while(s_n < e_n){
str[s_n++] = r;
}
return;
}

実行結果(.cにマッチするようにしてある)

# ./a.out hogehoge.c c.ge .choge.c
NG -> ./a.out
OK -> hogehoge**
NG -> c.ge
OK -> **hoge**

・・・いけてるよね?

そしてmixiではソース公開しないという、ね

テーマ:プログラミング - ジャンル:コンピュータ

コメント
この記事へのコメント
どうせstring.h使うならstrstr使えばよかったよ('ω`)

一行で書いちゃうもっとすごい人も居たけど

あれは思いつかなかった
2006/10/28 (土) 01:14:16 | URL | 中の人 #-[ 編集]
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
この記事へのトラックバック
copyright © 2005 GEEKy Script Writer [perl and more!] all rights reserved.
Powered by FC2ブログ.