| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1105 人关注过本帖
标题:编程求助,,,
只看楼主 加入收藏
so_far
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2018-7-25
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
编程求助,,,
题目:编程实现一个比较任意两个软件版本号大小的函数,如 1.2.3a 和 1.2.4b 比较,后者版本号更大,请考虑各种情况,不可以使用系统提供的比较函数。

实现:
#include <iostream>
using namespace std;

int main()
{

    cout<<"请输入任意两个软件版本号"<<endl;
    string s1,s2;
    int flag=0;
    int i=0;
    cin>>s1>>s2;
    for(i=0; i<s1.length()&&i<s2.length(); i++)
    {
        if(s1[i]=='.'||s2[i]=='.')
        {
            if(s1[i] == s2[i])
            {
                continue;
            }
            else if(s1[i]=='.'&&s2[i]!='.')
            {
                flag = -1;
                break;
            }
            else if(s1[i]!='.'&&s2[i]=='.')
            {
                flag = 1;
                break;
            }
        }
        else
        {
            if(s1[i] == s2[i])
            {
                continue;
            }
            else if(s1[i] > s2[i])
            {
                flag = 1;
                break;
            }
            else if(s1[i] < s2[i])
            {
                flag = -1;
                break;
            }
        }

    }
    if(flag==0)
    {
        if(s1.length()==s2.length())
        {
            cout<<"软件版本号相同"<<endl;
        }
        else if(s1.length()>s2.length())
        {
            cout<<"第一个软件版本号大"<<endl;
        }
        else if(s1.length()<s2.length())
        {
            cout<<"第二个软件版本号大"<<endl;
        }
    }
    else if(flag==1)
    {
        cout<<"第一个软件版本号大"<<endl;
    }
    else if(flag==-1)
    {
        cout<<"第二个软件版本号大"<<endl;
    }

}

这个方法太麻烦,也不知道对不对,欢迎大家指正,请教大家有没有更好的方法?
搜索更多相关主题的帖子: 软件 版本 cout flag length 
2018-08-25 13:17
Jonny0201
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:52
帖 子:488
专家分:2603
注 册:2016-11-7
收藏
得分:20 
感觉还有优化的余地
程序代码:
#include <iostream>

using namespace std;
int main(int argc, char *argv[]) {
    string a, b;
    cin >> a >> b;
    string::const_iterator it(b.cbegin());
    for(auto &c : a) {
        if(c != *it++) {
            cout << (c > *(it - 1) ? "a 大" : "b 大") << endl;
            return 0;
        }
    }
    if(it != b.cend()) {
        cout << "b 大" << endl;
        return 0;
    }
    cout << "一样大" << endl;
}
2018-08-25 17:17
so_far
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2018-7-25
收藏
得分:0 
回复 2楼 Jonny0201
非常感谢你的帮助,你的代码很精简。不过,我测试样例的时候(a.a  a+.a)会出现错误,在你代码基础上,我又做了如下修改,还请指正。
#include <iostream>

using namespace std;
int main(int argc, char *argv[])
{
    string a, b;
    cin >> a >> b;
    string::const_iterator it(b.cbegin());
    for(auto &c : a)
    {
        if(c != *it++)
        {
            if(c=='.'||*(it-1)=='.')
            {
                cout<<(c != '.' ?"a 大" : "b 大")<<endl;
                return 0;
            }
            else
            {
                cout << (c > *(it - 1) ? "a 大" : "b 大") << endl;
                return 0;
            }

        }

    }
    if(it != b.cend())
    {
        cout << "b 大" << endl;
        return 0;
    }
    cout << "一样大" << endl;
}
2018-08-25 20:31
Jonny0201
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:52
帖 子:488
专家分:2603
注 册:2016-11-7
收藏
得分:0 
回复 3楼 so_far
是不是没有 0 开头直接是点开头?
2018-08-25 22:18
so_far
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2018-7-25
收藏
得分:0 
回复 4楼 Jonny0201
其实0和.开头都可以,只是用点分段。
2018-08-28 22:15
快速回复:编程求助,,,
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016712 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved