C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: C#配列へ格納


(過去ログ 57 を表示中)

[トピック内 12 記事 (1 - 12 表示)]  << 0 >>

■32113 / inTopicNo.1)  C#配列へ格納
  
□投稿者/ 幸広 (4回)-(2009/02/01(Sun) 22:58:00)

分類:[C#] 

2009/02/01(Sun) 23:11:51 編集(投稿者)

C#アプリ作成中です。

ある文字列で下記のようなものがあるとすると

「あいうAAAえおBBB」

HAIRETU[0] =あ
HAIRETU[1] =い
HAIRETU[2] =う
HAIRETU[3] =AAA
HAIRETU[4] =え
HAIRETU[5] =お
HAIRETU[6] =BBB
という風にAAA、BBB(他多数)は一つの配列に収めたい場合どのようにコードを書いたらいいのでしょうか
ある文字列はランダムでどんなパターンかわかりません。
ですがAAA、BBB、CCCなどの一つの配列に入れる文字列は決まっています。

無駄なコードを書けばなんとか作れそうですが、これだ!っていうコードがかけません。
無駄があまりないコードを教えてください
お願いいたします。

バージョンは3.0です
引用返信 編集キー/
■32114 / inTopicNo.2)  Re[1]: C#配列へ格納
□投稿者/ επιστημη (1635回)-(2009/02/01(Sun) 23:07:04)
επιστημη さんの Web サイト
分割ルールがわかんない。
あらかじめ用意された複数の文字列 "AAA","BBB","りんご","みかん"... があって、
入力文字列にそれらと一致するものがあればまとめて、さもなくば1文字ずつ、ですか?

引用返信 編集キー/
■32115 / inTopicNo.3)  Re[2]: C#配列へ格納
□投稿者/ 幸広 (6回)-(2009/02/01(Sun) 23:10:17)
No32114 (επιστημη さん) に返信
> 分割ルールがわかんない。
> あらかじめ用意された複数の文字列 "AAA","BBB","りんご","みかん"... があって、
> 入力文字列にそれらと一致するものがあればまとめて、さもなくば1文字ずつ、ですか?
>

すみません。επιστημη さんのおっしゃるとおりです。
基本一文字ずつで格納してAAA、BBBなど決まったものだけHAIRETU[3] =AAAのようにいれたいです。
引用返信 編集キー/
■32116 / inTopicNo.4)  Re[1]: C#配列へ格納
□投稿者/ Azulean (281回)-(2009/02/01(Sun) 23:10:36)
> 無駄なコードを書けばなんとか作れそうですが、これだ!っていうコードがかけません。
> 無駄があまりないコードを教えてください
「なんとか作れるコード」を書き込んでもらって、そのコードの意味を説明して下さい。
そうすれば、どの辺がこう書けるよといったアドバイスをもらえると思います。
引用返信 編集キー/
■32118 / inTopicNo.5)  Re[3]: C#配列へ格納
□投稿者/ επιστημη (1636回)-(2009/02/01(Sun) 23:21:31)
επιστημη さんの Web サイト
2009/02/01(Sun) 23:25:05 編集(投稿者)

> 基本一文字ずつで格納してAAA、BBBなど決まったものだけHAIRETU[3] =AAAのようにいれたいです。

「きまったもの」の中に "東","東京","京都","東京都","港区","京都港","東京都港区" があり、
入力文字列が "東京都港区三田" だったとき、どのように分割しましょうか。
なんてないじわるが思いつくあたり、仕様に曖昧さが残ってます。

# "うし","しか","かも","かもしか" に対して "うしかもしか" を入力してもかまわんが♪

引用返信 編集キー/
■32120 / inTopicNo.6)  Re[4]: C#配列へ格納
□投稿者/ 幸広 (7回)-(2009/02/01(Sun) 23:51:30)
No32118 (επιστημη さん) に返信
> 2009/02/01(Sun) 23:25:05 編集(投稿者)
>
>>基本一文字ずつで格納してAAA、BBBなど決まったものだけHAIRETU[3] =AAAのようにいれたいです。
>
> 「きまったもの」の中に "東","東京","京都","東京都","港区","京都港","東京都港区" があり、
> 入力文字列が "東京都港区三田" だったとき、どのように分割しましょうか。
> なんてないじわるが思いつくあたり、仕様に曖昧さが残ってます。
>
> # "うし","しか","かも","かもしか" に対して "うしかもしか" を入力してもかまわんが♪

左から右に文字列を見て先に一致した文字で構いません。
ためしに今、なんとか作れるコードとして作成している最中です。
引用返信 編集キー/
■32131 / inTopicNo.7)  Re[5]: C#配列へ格納
□投稿者/ .SHO (628回)-(2009/02/02(Mon) 10:49:41)
CompareToで検索してSubstringで取り出せばいいのでは?
引用返信 編集キー/
■32140 / inTopicNo.8)  Re: C#配列へ格納
□投稿者/ 魔界の仮面弁士 (983回)-(2009/02/02(Mon) 12:06:42)
2009/02/02(Mon) 13:03:52 編集(投稿者)

No32120 (幸広 さん) に返信
> ためしに今、なんとか作れるコードとして作成している最中です。

3.0 だと、こう書けるかな…。
手元に C# 2.0 環境(VS2005)しか無いので検証できていませんが。

-- 編集 --

列挙して List<T>.Find で探すコードを投稿していましたが、
No32147 に倣って、実装例を引っ込めておきます。
引用返信 編集キー/
■32147 / inTopicNo.9)  Re[5]: C#配列へ格納
□投稿者/ επιστημη (1638回)-(2009/02/02(Mon) 12:42:43)
επιστημη さんの Web サイト
> ためしに今、なんとか作れるコードとして作成している最中です。

書けたけどスレ主を尊重して"おあずけ"にしときます。
# foreach でくるくる回しながら string.StartsWith で見つけました

引用返信 編集キー/
■32402 / inTopicNo.10)  Re[6]: C#配列へ格納
□投稿者/ επιστημη (1661回)-(2009/02/06(Fri) 10:46:29)
επιστημη さんの Web サイト
>ためしに今、なんとか作れるコードとして作成している最中です。

チンチン☆⌒ 凵\(\・∀・) まだぁ?

引用返信 編集キー/
■32425 / inTopicNo.11)  Re[7]: C#配列へ格納
□投稿者/ かげまる (1回)-(2009/02/06(Fri) 13:53:03)
No32402 (επιστημη さん) に返信
> >ためしに今、なんとか作れるコードとして作成している最中です。
>
> チンチン☆⌒ 凵\(\・∀・) まだぁ?

上みて吹き出して周りから冷ややかな<`ш´>視線浴びました・・
エピさん おもろすぎ

引用返信 編集キー/
■32715 / inTopicNo.12)  Re[7]: C#配列へ格納
□投稿者/ επιστημη (1715回)-(2009/02/13(Fri) 10:24:28)
επιστημη さんの Web サイト
> >ためしに今、なんとか作れるコードとして作成している最中です。
> 
> チンチン☆⌒ 凵\(\・∀・) まだぁ? 

とっくにTimeOverしてっだろからお披露目。

using System.Collections.Generic;

class Program {
  public static void Main() {
    // 単語表
    IEnumerable<string> keywords = new string[] { "うし","しか","かも","かもしか" };
    // 入力
    string input = "うしかもしかしかいないかも";
    // 分割文字列群 : 結果はココに。
    List<string> divided = new System.Collections.Generic.List<string>();

    // 入力がなくなるまで繰り返し
    while ( input.Length != 0 ) {
      // 入力文字列が単語表にある文字列から始まるかを調べ、
      // 切り出す文字数を設定
        int splitLength = 1;
        foreach (string keyword in keywords) {
        if ( input.StartsWith(keyword) ) {
          splitLength = keyword.Length;
          break;
        }
      }
      // 文字列を切り出して分割文字列群に追加し、入力文字列の頭を削る
      divided.Add(input.Substring(0,splitLength));
      input = input.Remove(0,splitLength);
    }
    // 結果確認
    string[] HAIRETU = divided.ToArray();
    foreach ( string word in HAIRETU ) {
      System.Console.WriteLine(word);
    }
  }
}

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -