CStringArrayの要素比較

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ざこ

CStringArrayの要素比較

#1

投稿記事 by ざこ » 16年前

VC++6.0のMFCでCStringArrayを最近よく使ってるのですが
例えばドロップしてきたファイルとリストビューに表示されているファイルが一致している場合の
処理を考えると
CStringArray xxx;
CStringArray yyy;
int index=-1;
for(int i=0; f<=__argc;i++){
  xxx.Add(__argv);
  while((index=m_list.GetNextItem(index,LVNI_ALL))!=-1){
     CString str=m_list.GetItemText(index,0);
     yyy.Add(str);
  }

  if(xxx==yyy){
     //処理
  }
}

と試しにしてみましたがif(xxx==yyy){ の所でDebug Assertion Failedと出て辿ってみると

_AFXCOLL_INLINE CString& CStringArray::ElementAt(int nIndex)
{ASSERT(nIndex>=0&&nIndex<m_nSize);
return m_pData[nIndex];}


となっておりました。
CStringArray同士の要素比較はできないのでしょうか?

box

Re:CStringArrayの要素比較

#2

投稿記事 by box » 16年前

> for(int i=0; f<=__argc;i++){

変数 i の上限のガードがかかっていなくて、
i の値は増えっぱなしであるように見えます。
そんなことはないですか?

ざこ

Re:CStringArrayの要素比較

#3

投稿記事 by ざこ » 16年前

すいません
i<=__argc のミスです。
サンプルプログラムを組みながら書いたのでコピペしませんでした。

Blue

Re:CStringArrayの要素比較

#4

投稿記事 by Blue » 16年前

数が一致していますか?

if (xxx.GetSize() != yyy.GetSize()) {
AfxMeesageBox(_T("中身見るまでもなく、ちげぇ"));
}

ざこ

Re:CStringArrayの要素比較

#5

投稿記事 by ざこ » 16年前

あ・・一緒じゃないですね。サイズが同じものしかできないのでしょうか?

Blue

Re:CStringArrayの要素比較

#6

投稿記事 by Blue » 16年前

( ゜Д゜)<ハァ?
サイズが違う=全部が同じになるわけがない

ということではないの?
途中まであっていれば一致している?

ざこ

Re:CStringArrayの要素比較

#7

投稿記事 by ざこ » 16年前

あああそういうことですか。そりゃ全部が同じになるわけがないですね。やり方がどうやらおかしいようです。
xxxとyyyの要素が一致している場合の処理をしたいんですけどこの場合どうやったらいいのでしょうか?

ざこ

Re:CStringArrayの要素比較

#8

投稿記事 by ざこ » 16年前

しかしサイズが同じでも同じエラーがでますね。

Blue

Re:CStringArrayの要素比較

#9

投稿記事 by Blue » 16年前

そのままなのでは?
bool bSame = true;
if (xxx.GetSize() != yyy.GetSize()) {
	bSame = false;
}
else
{
	for (int i = 0; i < xxx.GetSize(); ++i)
	{
		if (xxx != yyy)
		{
			bSame = false;
			break;
		}
	}
}

// 一致した場合
if (bSame)
{

Blue

Re:CStringArrayの要素比較

#10

投稿記事 by Blue » 16年前

>しかしサイズが同じでも同じエラーがでますね。
というか、ループの中でAddしているのであれば、タイミングによって同じになったりしますよね。
まずは、追加しながら比較せず、どちらの配列も追加し終わった後に比較しましょう。

ざこ

Re:CStringArrayの要素比較

#11

投稿記事 by ざこ » 16年前

そういうことでしたか、ヤフーとかで調べてるのですがどうも情報が少なく質問しました。
色々いじくって理解してみます。ありがとうございました。

ざこ

Re:CStringArrayの要素比較

#12

投稿記事 by ざこ » 16年前

ああ、やはりサイズが同じじゃないと比較できないのかな。どうもそこがしっくりきません。
xxx[1]=C:\\○
xxx[2]=C:\\△
xxx[3]=C:\\□
xxx[4]=C:\\×

yyy[1]=C:\\+
yyy[2]=C:\\@
yyy[3]=C:\\△
だったときにxxx[4]のときとyyy[3]のときを取り出したい。

ちょっとサンプルプログラム変更してみて
for(int i=1;i<__argc;i++){
  xxx.Add(__argv);
}

while((index=m_list.GetNextItem(index,LVNI_ALL))!=-1){
   CString str=m_list.GetItemText(index,0);
    yyy.Add(str);
}

//両方の配列コレクションの要素格納完了
for(int p=1;p<=c;p++){
  for(int q=0; q<yyy.GetSie();q++){
    if(xxx[p]==yyy[q]){
       //処理
     }
  }
}

でも同じ結果でした。

ざこ

Re:CStringArrayの要素比較

#13

投稿記事 by ざこ » 16年前

CStringArrayじゃなくてもそういうことが可能なクラスやメンバ関数を求めてるのですが・・

ざこ

Re:CStringArrayの要素比較

#14

投稿記事 by ざこ » 16年前

あーでもなんか同じことしてるような気もする・・
全部一致しませんよね。

Blue

Re:CStringArrayの要素比較

#15

投稿記事 by Blue » 16年前

一致している項目だけ拾いたいということ?

ざこ

Re:CStringArrayの要素比較

#16

投稿記事 by ざこ » 16年前

そうです。

バグ

Re:CStringArrayの要素比較

#17

投稿記事 by バグ » 16年前

普通に二重ループじゃ駄目なの?(^_^;)

ざこ

Re:CStringArrayの要素比較

#18

投稿記事 by ざこ » 16年前

できればCStringArrayで格納しておいて使いたいんです。今後色々つかえそうだしこんなことができるなら
結構幅広がりますしね。

toyo

Re:CStringArrayの要素比較

#19

投稿記事 by toyo » 16年前

//両方の配列コレクションの要素格納完了
for(int p=1;p<=c;p++){
  for(int q=0; q<yyy.GetSie();q++){
    if(xxx[p]==yyy[q]){
       //処理
     }
  }
}
やりかたはこの2重ループでよいと思いますが
for(int p=1;p<=c;p++){
は
for(int p = 0; p < (__argc - 1); p++){
でしょう

バグ

Re:CStringArrayの要素比較

#20

投稿記事 by バグ » 16年前

こんな感じ?

cmp1とcmp2が比較用のCStringArrayで、bufにcmp1とcmp2を比較した結果見つかった同じCStringが格納されるようになってます。

ただし、同じデータが2つ以上あった場合にダブって検出されるんで、その辺の抑止は自分で考えてみてください。
void cmpStringArray(CStringArray& cmp1, CStringArray& cmp2, CStringArray& buf)
{
	for (int i = 0; i < cmp1.GetSize(); ++i)
	{
		for (int j = 0; j < cmp2.GetSize(); ++j)
		{
			if (cmp1.GetAt(i) == cmp2.GetAt(j))
			{
				buf.Add(cmp1.GetAt(i));
			}
		}
	}
}

ざこ

Re:CStringArrayの要素比較

#21

投稿記事 by ざこ » 16年前

cは__argc-1に置き換えてました。。
しかしそれに直してもやはり同じエラーです。

ざこ

Re:CStringArrayの要素比較

#22

投稿記事 by ざこ » 16年前

うううむ、pの上限をp<__argc-1ではなく
p<xxx.GetSize()にしたらエラーでなくなりました。
中身みたら同じ値でしたが、これは何かおかしいのでしょうか?

閉鎖

“C言語何でも質問掲示板” へ戻る