栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 3794 Extended Normal Orde...

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 3794 Extended Normal Orde...

#include <iostream>#include <string>using namespace std;string extractword(string str, int index, bool afterdigit, int& step, bool& isdigit, int& digit, bool& neg){    string word;    neg = false;    isdigit = false;    digit = 0;    step = 0;    bool effective = false;    bool repeatedzero = false;    if(!afterdigit)    {        effective = true;    }    for(int i = index; i < str.length(); ++i)    {        step++;        if(str[i] == '-' || str[i] == '+')        { if(i == index) {     if(!afterdigit && str[i] == '-')     {         neg = true;     } } else {     if(isdigit & neg)     {         digit *= -1;     }     step--;     return word; } if(!afterdigit && i + 1 < str.length() && (str[i + 1] <= '9' && str[i + 1] >= '0')) {     continue; }        }        if(str[i] <= '9' && str[i] >= '0')        { if(!isdigit) {     if(i != index && !(i == index + 1 && (str[index] == '+' || str[index] == '-') && effective))     {         step--;         return word;     } } isdigit = true; afterdigit = true; digit = digit * 10 + str[i] - '0'; if(str[i] == '0' && i + 1 < str.length() && (str[i + 1] <= '9' && str[i + 1] >= '0')) {     continue; }        }        if(str[i] <= 'Z' && str[i] >= 'A')        { str[i] += 'a' - 'A';        }        if(str[i] <= 'z' && str[i] >= 'a')        { if(isdigit) {     if(neg)     {         digit *= -1;     }     step--;     return word; }        }        word.push_back(str[i]);    }    if(isdigit && neg)    {        digit *= -1;    }    return word;}int compare(string a, string b){    bool afterdigita = false, afterdigitb = false;    int i = 0, j = 0;    while(i < a.length() && j < b.length())    {        int stepa = 0, stepb = 0;        bool isdigita = false, isdigitb = false;        bool isnega = false, isnegb = false;        int digita = -1, digitb = -1;        string worda = extractword(a, i, afterdigita, stepa, isdigita, digita, isnega);        string wordb = extractword(b, j, afterdigitb, stepb, isdigitb, digitb, isnegb);        if(isdigita)        { afterdigita = true;        }        else        { afterdigita = false;        }        if(isdigitb)        { afterdigitb = true;        }        else        { afterdigitb = false;        }        if(isdigita && isdigitb)        { if(isnega && !isnegb) {     if(worda == "0" && wordb == "0")     {         return 0;     }     else     {         return -1;     } } if(isnegb && !isnega) {     if(worda == "0" && wordb == "0")     {         return 0;     }     else     {         return -1;     } } if(worda.length() != wordb.length()) {     if(isnega)     {         return worda.length() < wordb.length() ? 1 : -1;     }     else     {         return worda.length() < wordb.length() ? -1 : 1;        } } for(int i = 0; i < worda.length(); ++i) {     if(worda[i] != wordb[i])     {         if(isnega)         {  return (worda[i] - '0') < (wordb[i] - '0') ? 1 : -1;         }         else         {  return (worda[i] - '0') < (wordb[i] - '0') ? -1 : 1; }     } }        }        else        { if(worda < wordb) {     return -1; } else if(worda > wordb) {     return 1; }        }        i += stepa;        j += stepb;    }    if(i < a.length())    {        return 1;    }    if(j < b.length())    {        return -1;    }    return 0;}int main(){    int N;    cin>>N;    for(int no = 0; no < N; ++no)    {        string a, b;        cin>>a>>b;        cout<<no + 1<<" ";        cout<<compare(a, b)<<endl;    }    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/381032.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号