比较模板中的两个字符串

时间:2014-05-19 20:08:00

标签: c++ string

当我用int,double和char测试时。它工作正常。只有字符串使用相同的模板才有问题。我没有在这里包含int,float和chars的代码。

#include <iostream>

using namespace std;

template <class T>
T minimum (T test1, T test2)
{
    if(test1 > test2)
        return test2;
    if(test2 > test1)
        return test1;

    cout << "They're both the same." << endl;
}

int main()
{
string str1, str2;
string temp;
    cout << "Enter two strings you want to compare." << endl;
    cin.ignore();
    getline(cin, str1);
    getline(cin, str2);

    temp = minimum(str1, str2);
    cout << temp;
return 0;
}

结果

1)
Enter two strings you want to compare.
two
two
two

2)
Enter two strings you want to compare.
two three
three two
three two

3)
Enter two strings you want to compare.
abcdef g
abcdef ghi
abcdef ghi

对于结果#1,我不明白为什么&#34;两个&#34;和&#34;两个&#34;将返回&#34;两个&#34;而不是传达信息&#34;他们都是相同的。&#34;

对于结果#2,isn&#39; t&#34;两个三&#34;和&#34;三个两个&#34;?我不明白&#34;三二&#34;更小。

对于结果#3,似乎这个程序只会返回测试2。

1 个答案:

答案 0 :(得分:1)

当两者相等时,你错过了return语句。

template <class T>
T minimum (T test1, T test2)
{
    if(test1 > test2)
        return test2;
    if(test2 > test1)
        return test1;

    cout << "They're both the same." << endl;
    return test1;
}

你说:

  

我不明白为什么&#34;两个&#34;和&#34;两个&#34;将返回&#34;两个&#34;而不是传达信息&#34;他们都是相同的。&#34;

确实很奇怪。也许输入中有空格字符。

你说:

  

不是&#34;两个三&#34;和&#34;三个两个&#34;?我不明白&#34;三二&#34;更小。

字符串&#34;两个三&#34;和&#34;三个二&#34;不一样。 &#34;三二&#34;因为如果你不得不将这些字符串放在字典中,那就更小了,#34;三个字符串&#34;将来之前&#34;两个三&#34;。

你说:

  

似乎这个程序只会返回测试2。

这很奇怪。

事实证明,我在你的测试中看到了同样的行为。罪魁祸首证明是这条线:

cin.ignore();

删除该行后,代码的行为就像您期望的那样。