1

入門 C++ コースの文字列比較チェックに取り組もうとしています。それはオンラインコースであり、残念ながらインストラクターはあまり反応がありません. 現在のラボでは、文字列データに対して多くの操作を実行する必要があります。

現在、文字列に繰り返し文字があるかどうかを確認し、繰り返しが見つかった場合は、現在の場所で繰り返し文字を削除し、文字の 1 つのコピーを文字列の先頭に移動する手順に取り組んでいます。これは、最初に見つかった double に対してのみ実行されます。

文字列内を移動して一致を探し、格納された文字 (反復ごとに更新される) を文字列内の現在の位置にチェックする基本的なカウンターを設定しました。

複数の文字列関数を試しました (現在の関数とinputString[i]以前の関数を比較し、2 番目の文字列 tempStore として保存されています) が、常に char 変換エラーが発生しました。代わりに以下を試しましたが、エラーが発生しています:「'char' から ' ' への変換が無効const char*です。

inputStringユーザーによって指定され、char型として定義されtestAますtestB

何か案は?

while (opComplete == false) {

    if (i == 0) {
        i++;
    }

    else if (i == inputString.size()) {
        //Not Found
        opComplete = true;
    }

    else if (i > 0) {

        testA = inputString[i-1];
        testB = inputString[i];

        if (strcmp(testA,testB) != 0) {
            i++;
        }

        else {
            inputString.insert(0,inputString[i]);
            inputString.erase(i,1);
            inputString.erase(i-1,1);
            opComplete = true;
        }

    }

}
4

2 に答える 2

1

あなたの問題はこの行にあります:

inputString.insert(0,inputString[i]);

ここstd::string.insert()で呼び出す方法には、次のシグネチャがあります。

string& insert ( size_t pos1, const char* s );

したがって、const charポインターが必要です。ただし、あなたはそれにinputString[i]. の戻り値std::string.operator[]は参照 (ここのように) であるため、エラーになります。ただし、に到達するまでにelse、変数に目的の文字が既にあるtestBため、行を次のように変更するだけです。

 inputString.insert(0, &testB);

また、通常charの s を に渡すこともできませんstrcmpoperator==ただし、あなたの場合は、またはを使用できますoperator!=

于 2012-11-13T06:33:03.600 に答える
0

メソッドの使い方がinsert間違っています。可能な引数については、こちらのリファレンスを確認してください。

while (opComplete == false)
{
    if (i == 0)
    i++;

    else if (i == inputString.size())
    opComplete = true;

    else if (i > 0) {
    char testA = inputString[i-1];
    char testB = inputString[i];

    if(testA!=testB)
    i++;

    else {
        inputString.insert(0,&testB); //Problem Corrected here.
        inputString.erase(i,1);
        inputString.erase(i-1,1);
        opComplete = true;
    }
    }
}
于 2012-11-13T06:49:14.483 に答える