编码

假定一种编码的编码范围是a ~ y的25个字母,从1位到4位的编码,如果我们把该编码按字典序排序,形成一个数组如下: a, aa, aaa, aaaa, aaab, aaac, … …, b, ba, baa, baaa, baab, baac … …, yyyw, yyyx, yyyy 其中a的Index为0,aa的Index为1,aaa的Index为2,以此类推。 编写一个函数,输入是任意一个编码,输出这个编码对应的Index.
输入描述:
输入一个待编码的字符串,字符串长度小于等于100.

输出描述:
输出这个编码的index

#include<iostream>
#include<cassert>

using namespace std;

int convert(string s){
    if(s.size()<4){
        for(int i=0;i<s.size()-1;i++){
            if(s[i]!=s[i+1] && s[i] !='z' && s[i+1] !='z'){
                throw invalid_argument("invalid input!");
            }
        }

        switch (s.size()){
            case 1:return 15628*(s[0]-'a');
            case 2:return 15628*(s[0]-'a')+1;
            case 3:return 15628*(s[0]-'a')+2;
        }

    } else{
        assert(s.size()==4);
        for(int i=0;i<s.size();i++){
            if(s[i]=='z'){
                throw invalid_argument("error input");
            }
        }

        int qian=s[0]-'a';
        int bai=s[1]-'a';
        int shi=s[2]-'a';
        int ge=s[3]-'a';

        int res=15628*qian+625*bai+25*shi+ge+3;
        return res;
    }
}

int main(){
    cout<<convert("ayyz")<<endl;
    return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容