
mixiのC言語とC++言語コミュを覗いてたら僕にもできそうなのが質問として投げ出されていた
バグつぶし含め20分ぐらいでかいてみた
実行結果(.cにマッチするようにしてある)
・・・いけてるよね?
そしてmixiではソース公開しないという、ね
はじめまして。
どうしてもわからない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 | 中の人 #-[ 編集]

| ホーム |