更新 1
以前の更新に基づいて、これを行うことについてより良い洞察を得たと思いますが、この質問に対する答えが必要です. 現在のfor
ループには、という名前の変数がありますtstring
。次のようなことをする必要がありますが、うまくいきません。「この句Collection expression type 'NSString *' may not respond to countByEnumeratingWithState:objects:count:'
を修正するにはどうすればよいですか? 」というエラーが表示されます。for
for (NSUInteger i = 1; i < match.numberOfRanges; ++i)
{
NSRange matchedRange = [match rangeAtIndex: i];
NSString* tstring = [string substringWithRange: matchedRange];
for (char* suit in tstring){ // error here ********
NSLog(@"char: %@",suit);}
NSLog(@"range %lu string: %@", (unsigned long)i, tstring);
}
更新 1
更新 0
検索を必要としない別のアプローチを次に示しますが、for ループのコンテキストでこのアプローチを実現する方法はまだわかりません。
各カード (2 からエース) に 0 から 12 の整数を関連付ける、次の図式表現のような辞書が必要です (C で辞書を作成する方法は知っていると思いますが、objective-c ではない可能性があります)。
┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬──┬──┬──┐
│0│1│2│3│4│5│6│7│8│9│10│11│12│
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼──┼──┼──┤
│2│3│4│5│6│7│8│9│T│J│Q │K │A │
└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴──┴──┴──┘
4 つの名詞または配列を持つ構造体が必要ですが、どちらが長さ 13 であるかはわかりません。これは元の構造体に似ていますが、メンバーはカード スーツであり、プレイヤーの位置ではありません。
struct board {
int num;
char spade[13]
char heart[13]
char diamond[13]
char club[13]
};
ボード番号1の次の取引を想定すると、
Q952.652.KJT4.95 T.KQT84.A865.J73 K8763.A7.Q.KQT84 AJ4.J93.9732.A62
コードの for ループで次のプロセスが必要です。
spade[10] = N
spade[7] = N
spade[3] = N
spade[0] = N
heart[4] = N
heart[3] = N
etc.
問題は、「その処理を for ループでどのように行うか」です。
更新 0
次のコードは機能していますが、以下で説明する目的のために変更する必要があります。私のコンソール出力 (少なくとも最初の部分) も以下に示します。出力から、範囲 1 と範囲 4 から 19 の結果を特別な方法で保持する必要があります。
下の小さな表には、スペード、ハート、ダイアモンド、クラブのラベルが付いた行と、北、東、南、西のラベルが付いた列を持つ 4 x 4 配列の範囲番号が含まれています。ハートが選択されたら、行 H の内容を検索して、そのカードが N、E、S、または W のいずれにあるかを判断し、結果を報告する必要があります。表の各セルの内容は、何も含まれていない (空である) か、「23456789TJQKA」の文字セットを含む文字列であり、各行のどこかに 13 文字すべてが含まれていることに注意してください。表の数字は、現在の出力の範囲番号を参照しています。
N E S W
S 4 8 12 16
H 5 9 13 17
D 6 10 14 18
C 7 11 15 19
検索タスクを見越して結果を保存する方法を学びたいと思います。各メンバーに整数のボード番号 (1 ~ 36 の数字) と 4 つの文字列が含まれる C 構造体を作成できますか? たとえば、以下の構造体は機能しますか? もしそうなら、objective-c でそのような構造体をどのように検索しますか? また、ループ内の構造体にデータを入力するためのヘルプを使用することもできます。
struct board {
int num;
char N[13]
char E[13]
char S[13]
char W[13]
};
コードの抜粋は次のとおりです。
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:toMatch options:NSRegularExpressionDotMatchesLineSeparators error:&error];
NSLog(@"pattern length: %lu", (unsigned long)[toMatch length]);
NSUInteger numberOfMatches = [regex numberOfMatchesInString:string options:0 range:NSMakeRange(0, [string length])];
NSLog(@"number of matches: %lu", (unsigned long)numberOfMatches);
for (NSTextCheckingResult* match in [regex matchesInString:string options:NSRegularExpressionDotMatchesLineSeparators range:NSMakeRange(0, [string length])])
{
NSLog(@"Number of ranges in match: %u", match.numberOfRanges);
for (NSUInteger i = 0; i < match.numberOfRanges; ++i)
{
NSRange matchedRange = [match rangeAtIndex: i];
NSString* tstring = [string substringWithRange: matchedRange];
NSLog(@"range %lu string: %@", (unsigned long)i, tstring);
}
}
サンプル出力は次のとおりです。
2013-02-04 16:24:06.583 [71684:11303] string length: 22365
2013-02-04 16:24:06.591 [71684:11303] pattern length: 347
2013-02-04 16:24:06.602 [71684:11303] number of matches: 36
2013-02-04 16:24:06.613 [71684:11303] Number of ranges in match: 20
2013-02-04 16:24:06.613 [71684:11303] range 0 string:
[Board "1"]
[West ""]
[North ""]
[East ""]
[South ""]
[Dealer "N"]
[Vulnerable "None"]
[Deal "N:Q952.652.KJT4.95 T.KQT84.A865.J73 K8763.A7.Q.KQT84 AJ4.J93.9732.A62"]
2013-02-04 16:24:06.613 [71684:11303] range 1 string: 1
2013-02-04 16:24:06.613 [71684:11303] range 2 string: N
2013-02-04 16:24:06.614 [71684:11303] range 3 string: None
2013-02-04 16:24:06.614 [71684:11303] range 4 string: Q952
2013-02-04 16:24:06.614 [71684:11303] range 5 string: 652
2013-02-04 16:24:06.614 [71684:11303] range 6 string: KJT4
2013-02-04 16:24:06.614 [71684:11303] range 7 string: 95
2013-02-04 16:24:06.614 [71684:11303] range 8 string: T
2013-02-04 16:24:06.614 [71684:11303] range 9 string: KQT84
2013-02-04 16:24:06.614 [71684:11303] range 10 string: A865
2013-02-04 16:24:06.615 [71684:11303] range 11 string: J73
2013-02-04 16:24:06.615 [71684:11303] range 12 string: K8763
2013-02-04 16:24:06.615 [71684:11303] range 13 string: A7
2013-02-04 16:24:06.615 [71684:11303] range 14 string: Q
2013-02-04 16:24:06.615 [71684:11303] range 15 string: KQT84
2013-02-04 16:24:06.616 [71684:11303] range 16 string: AJ4
2013-02-04 16:24:06.616 [71684:11303] range 17 string: J93
2013-02-04 16:24:06.616 [71684:11303] range 18 string: 9732
2013-02-04 16:24:06.616 [71684:11303] range 19 string: A62