C++ 输入3个字符串,按由小到大的顺序输出 错误请教

#include<iostream.h>
#include<string>
int main()
{
string string1, string2, string3, temp;
cout << "please input three strings";
cin>>string1>>string2>>string3;

if(string2 > string3)
{
temp = string2;
string2 = string3;
string3 = temp;
}
if(string1 <= string2)
cout << string1 << " " << string2 << " " << string3 << endl;
else if(string1 <= string3)
cout << string2 << " " << string1 << " " << string3 << endl;
return 0;
}
这个书上的例题哪里错了啊

错在输出分支不满足完备性上面了。
这段三个字符串比较排序代码使用了插入排序的算法逻辑,即:选择一个(剩余)元素string1,往有序列表(string2 < string3)中执行插入操作,插入位置无非有(1)string2之前;(2)string2与string3之间;(3)string2之后;最终构成三个字符串的有序序列。
有n个元素的插入排序过程,元素最少比较(次数)分支有n*(n+1)/2-2个。
至于修改本段代码,用:
else if(string1 > string3)
cout << string2 << " " << string3 << " " << string1 << endl;
else
cout << “Unknow exception or error.” <<endl;
还是
else
cout << string2 << " " << string3 << " " << string1 << endl;
我认为和程序目标和软件代码质量要求有关,我们不做空洞的比较和争辩。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-02

修改如下:

#include<iostream.h>
#include<string>
int main()
{
    string string1, string2, string3, temp;
    cout << "please input three strings";
    cin>>string1>>string2>>string3;
    if(string2 > string3)
    {
        temp = string2;
        string2 = string3;
        string3 = temp;
    }
    //已知string3>string2
    //string2>string1,顺序可以确定
    if(string1 <= string2)
        cout << string1 << " " << string2 << " " << string3 << endl;
    else if(string1 <= string3)
        cout << string2 << " " << string1 << " " << string3 << endl;
    //除了string1>string2 && string<=string3,还有string1>string3
    else 
        cout << string2 << " " << string3 << " " << string1 << endl;
    return 0;

}

第2个回答  2013-09-02
#include<iostream>
#include<string>
using namespace std;
int main()
{
string string1, string2, string3, temp;
cout << "please input three strings";
cin>>string1>>string2>>string3;

if(string2 > string3)
{
temp = string2;
string2 = string3;
string3 = temp;
}
if(string1 <= string2)
cout << string1 << " " << string2 << " " << string3 << endl;
else if(string1 <= string3)
cout << string2 << " " << string1 << " " << string3 << endl;
return 0;
}本回答被网友采纳
第3个回答  2013-09-02
最后再加个else if:
else if(string1 > string3)
cout << string2 << " " << string3 << " " << string1 << endl;
第4个回答  2013-09-02
在main之前加 using namespace std;
相似回答