0

文字列配列の余分な要素を排除しようとしており、以下のコードを書きました。strcmp 関数と文字列配列に問題があるようです。strcmp は、文字列配列要素をそのように受け入れません。それを修正するのを手伝ってもらえますか? array3 は文字列配列です。私は C++ でコーディングしています。やりたいことは、文字列配列に複数の「リンゴ」または「バナナ」があるようなものです。しかし、必要なのは「リンゴ」または「バナナ」の 1 つだけです。

for(int l = 0; l<9999; l++)
{
    for(int m=l+1;m<10000;m++)
        if(!strcmp(array3[l],array3[m]))
        {
            array3[m]=array3[m+1];
        }
}
4

3 に答える 3

1

まず、次のタイプoperator==の文字列を比較するために使用できます。std::string

std::string a = "asd";
std::string b = "asd";
if(a == b)
{
//do something
}

次に、10000が配列のサイズである場合、コードにエラーがあります。

array3[m]=array3[m+1];

この行では、最大10000のm+1st要素にアクセスしmています。これは、最終的に10001番目の要素にアクセスして、配列結合から抜け出そうとすることを意味します。

最後に、あなたのアプローチは間違っており、この方法では重複する文字列をすべて削除することはできません。それを行うためのより良い(しかし最良ではない)方法はこれ(擬似コード)です:

std::string array[];//initial array
std::string result[];//the array without duplicate elements
int resultSize = 0;//The number of unique elements.
bool isUnique = false;//A flag to indicate if the current element is unique.

for( int i = 0; i < array.size; i++ )
{ 
    isUnique = true;//we assume that the element is unique
    for( int j = 0; j < result.size; j++ ) 
    {
        if( array[i] == result[j] )
        {
            /*if the result array already contains such an element, it is, obviously, 
            not unique, and we have no interest in it.*/
            isUnique = false;
            break;
        }
    }
    //Now, if the isUnique flag is true, which means we didn't find a match in the result array,
    //we add the current element into the result array, and increase the count by one. 
    if( isUnique == true )
    {
        result[resultSize] = array[i];
        resultSize++;
    }
}
于 2012-07-16T08:04:08.653 に答える
1

strcmp等しい場合は 0 を返すため、if (strcmp(s1,s2))...「文字列が等しい場合はこれを行う...」という意味になります。ということですか?

于 2012-07-16T07:03:14.123 に答える
0

strcmp は Cstrings でのみ機能するため、使用したい場合は、次のように変更することをお勧めします。strcmp(array3[l].c_str(),array3[m].c_str())これにより、文字列が C Strings になります。

array3[l]==array3[m]別のオプションは、文字列が等しいかどうかを示す等値演算子と単純に比較することです。

あなたがやろうとしていることを行う別の方法は、配列をセットに入れて反復処理することです。セットは、同じ内容の複数の文字列を取らない!

参考文献:

于 2012-07-16T08:12:29.800 に答える