No.16189![]() |
文字列の比較 投稿者---初心者(2004/08/16 14:51:02) |
||
Cを勉強しているの初心者です。 文字列の比較にワイルドカードを取り入れたいのですが何かいい方法はないでしょうか? たとえば strcmp("*.txt",filename); としてもうまくいきませんよね・・? |
No.16190![]() |
Re:文字列の比較 投稿者---Yuki(2004/08/16 15:03:50) |
||
>Cを勉強しているの初心者です。 >文字列の比較にワイルドカードを取り入れたいのですが何かいい方法はないでしょうか? >たとえば >strcmp("*.txt",filename); filename変数に".txt"という文字列があるか確認したいのですか? それならstrstr関数でできると思いますが・・・。 MSDNを「文字列操作ルーチン」で検索するとstr系の関数が一覧表示されるのでやりたいことを実現してくれる関数が見つけられるかもしれません。 #あと「初心者」という投稿者名はあまり好まれていないので、何でも良いから自分と識別できる名前を考えて投稿するようにしてください。 |
No.16192![]() |
Re:文字列の比較 投稿者---初心者改めCman(2004/08/16 15:12:52) |
||
説明不足ですみません。 やりたいことは、フォルダ内のファイルの検索です。 strstr関数をどのように使えばよいのでしょうか・・・? |
No.16194![]() |
Re:文字列の比較 投稿者---Sciggepy(2004/08/16 15:41:48) |
||
失礼、こっちを見ずに書き込んでしまいました。 環境が書かれていないので判りませんが、Windowsでは、FindFirstFile系の関数を使います。 |
No.16193![]() |
Re:文字列の比較 投稿者---Sciggepy(2004/08/16 15:18:02) |
||
あまりスマートではありませんが、 int strflt(const char *szStr1,const char *szStr2) { int len1,len2,nc,i,j; len1=strlen(szStr1); len2=strlen(szStr2); nc=max(len1,len2); for(i=0;i<=nc;i++) if(szStr1[i]=='?') { } else if(szStr1[i]=='*') { for(j=i;j<=len2;j++) { if(strflt(&szStr1[i+1],&szStr2[j])==0) return 0; } } else { if(szStr1[i]<szStr2[i]) return -1; if(szStr1[i]>szStr2[i]) return 1; } return 0; }でできると思います。(szStr1にワイルドカードを指定し、すべての文字がマッチすれば0を返す。) 問題があれば、つっこんでください。 |
No.16197![]() |
Re:文字列の比較 投稿者---かずま(2004/08/16 19:06:56) |
||
> 問題があれば、つっこんでください。 strflt("ab?", "ab") は 0 を返し、 strflt("?ab", "ab") は -1 を返しますね。 プログラムの書き方ですが、else が for に対応しているように見える インデントが気になります。 私なら次のようなプログラムにします。 int wild(const char *pat, const char *str) { for ( ; ; str++, pat++) switch (*pat) { case '\0': return *str != '\0'; case '*': for (pat++; wild(pat, str); str++) if (*str == '\0') return 1; return 0; case '?': if (*str == '\0') return 1; break; default: if (*str != *pat) return 1; break; } } |
No.16198![]() |
Re:文字列の比較 投稿者---Sciggepy(2004/08/16 22:26:35) |
||
>strflt("ab?", "ab") は 0 を返し、 >strflt("?ab", "ab") は -1 を返しますね。 これでは問題ないようですが? >プログラムの書き方ですが、else が for に対応しているように見える >インデントが気になります。 メモ帳で編集していた頃の癖です。(インデントが多くなりすぎると、画面からはみ出して編集しにくくなるので。) 「ワイルドカード」で検索した結果から http://www.hidecnet.ne.jp/~sinzan/tips/c/c_tip03.htm |
No.16199![]() |
Re:文字列の比較 投稿者---Sciggepy(2004/08/16 22:50:57) |
||
>>strflt("ab?", "ab") は 0 を返し、 >>strflt("?ab", "ab") は -1 を返しますね。 >これでは問題ないようですが? 嘘です。文字数が合っていませんね。 |