#include#include//计算以第i个字符打头,长度为j的字符串的个数 int f(int i,int j){if(j == 1){return 1;} else{int count = 0;int k;for(k = i + 1;k <= 26 - j + 1;k ++){count += f(k,j - 1);}return count;}} //计算不超过j的总长度 int g(int j){int i;int count = 0;for(i = 1;i <= 26;i ++){count += f(i,j);}return count;}int main(){char *str = "ab";int pos = 0;int i,j;//printf("%d\n",str[0] - 'a' + 1);//计算位数小于字符串长度的字典序个数 for(i = 1;i < strlen(str);i ++){pos += g(i);}//计算第一个字符串第一个字母前面的字典序个数for(i = 1;i < (str[0] - 'a' + 1);i ++){pos += f(i,strlen(str));} //处理后续的for(i = 1;i < strlen(str);i ++){for(j = str[i - 1] - 'a' + 1 + 1;j < str[i] - 'a' + 1;j ++){pos += f(j,strlen(str) - i);} }printf("The string's position is:%d\n",pos + 1);return 0;}
字典序问题。在数据加密和数据压缩中常需要对特殊的字符串进行编码。给定的字母表A由26个小写字母组成。该字母表产生的升序字符串中字母从左到右出现的次序与字母在字母表中出现的次序相同,且每个字符最多出现1
最新推荐文章于 2023-03-06 23:30:40 发布