c ++将引用字符串与字符串进行比较

时间:2013-03-19 02:50:23

标签: c++

我有一个方法,它有一个参数,它是一个字符串的引用,在我想要将这个引用的字符串与另一个字符串进行比较的方法中,这个字符串是一个名为transaction的对象的一部分,有一个事务数组。原始字符串都是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答案一样。不知道我之前没有注意到这一点,因为我正在使用视觉工作室调试控制台,猜测它是一件好事,我实际上并不负责为股票经纪人编写代码而哈哈

1 个答案:

答案 0 :(得分: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) {
...