1

文字列への参照であるパラメータを持つメソッドがあります。この参照された文字列を別の文字列と比較したいメソッドでは、この文字列はトランザクションと呼ばれるオブジェクトの一部であり、トランザクションの配列があります。元の文字列は両方ともstd::stringsです。==演算子を使用してみましたが、両方の文字列が同じであっても、これはtrueを返さないようです。たぶん、文字列のアドレスを比較します。

これが私が今持っているものです:

int Analyser::numSharesBoughtOf(string& stockSymbol)
{
    // Your code
    int Total=0;

    for (int tranNum(0); tranNum<numOfTranactions; tranNum++)
    {

        if (stockSymbol == Transactions[tranNum].stockSymbol)
        {
            Total = Total + Transactions[tranNum].numShares;
        }
    }

    if (Total > 0)
    {
        return Total;
    }
    else
    {
        return 0;
    }
}

トランザクションは、トランザクションの配列の開始へのポインタでもあります。これにより、違いが生じる場合があります。編集:返信ありがとうございます。銘柄記号に間違った名前を入力していたことがわかりました...この方法は、john.pavanによって投稿された.compare回答を使用した場合と同じように機能します。Visual Studioのデバッグコンソールを使用していたので、これまで気づかなかった方法がわかりません。実際には株式仲買人のコードの記述を担当していないのは良いことだと思います。

4

1 に答える 1

0

std :: string::compareを使用するだけです。strcmpのように機能することに注意してください。0はそれらが等しいことを意味します。

...
if (stockSymbol.compare(Transactions[tranNum].stockSymbol) == 0) {
...

コメントに基づいて、それはあなたを助けるつもりはありません。私が考えることができる他の唯一のことは、異なる大文字と小文字の文字列を比較しているということです。したがって、両方をより低い値に変換してから、比較します。

std::string copy1(stockSymbol);
std::string copy2(Transactions[tranNum].stockSymbol));
std::transform(copy1.begin(), copy1.end(), copy1.begin(), ::tolower);
std::transform(copy2.begin(), copy2.end(), copy1.begin(), ::tolower);
if (copy1 == copy2) {
...
于 2013-03-19T03:09:33.607 に答える