C++ 输出 类似excel列头的编号 A ,B,C,...,Z  AA,AB,..,AZ ...

生成类似 excel 版本号 A ,B,C,...,Z  AA,AB,..,AZ ...

  最近遇到一个需求:每次对一条记录进行修改或指定操作,需要生成一个历史版本,版本号需要采用类似excel表格的列号的形式,第一版本为A,第二版本为B,以此类推由A-Z,AA,AB,AC,...,AZ,ZZ,AAA-ZZZ。由于考虑到后面有根据版本号排序,根据版本号范围查询数据的需求,思考了一下,采用了数据库的版本号字段存的是数字1,2,3,4 ....分别对应A,,B,C,D ....,52对应AZ,这样的一个对应关系,查询到数据的时候把数字的版本号通过计算查询出对应的字符串版本(A,B,C...)在前台展示。如果需要根据版本号去数据库查询数据,可以根据前台传入的字符串版本号转换后再拼接参数查询,存数字最主要的是为了能更好的比较大小,下面把主要代码记录一下,大家如果有什么更好的解决方案,也可在下方留言大家一起讨论。

  

  1. /**

  2. * 将字符串(a-z)转换成数字

  3. * 按照excel表格的列号(如:a-->1,z-->26,aa->27,az-52,....)

  4. * @param str

  5. * @return

  6. */

  7. public static int str2int(String str){

  8. char[] array = str.toCharArray();

  9. int result = 0;

  10. for (int j = 0; j < array.length; j++) {

  11. result*=26;

  12. result+=char2int(array[j]);

  13. }

  14. return result;

  15. };

  16.  
  17. /**

  18. * 将字符转换成整数

  19. * @param ch

  20. * @return

  21. */

  22. public static int char2int(char ch){

  23. int result = -1;

  24. if(ch >= 'A' && ch <= 'Z'){

  25. result = ch - 'A' + 1;

  26. }else if(ch >= 'a' && ch <= 'z'){

  27. result = ch - 'a' + 1;

  28. }

  29. return result;

  30. }

  31.  
  32. /**

  33. * 将1转换成A,26转换成Z,无限往后推,对应excel表格的列

  34. * @param num

  35. * @return

  36. */

  37. public static String int2Str(int num){

  38. String result = "";

  39. num = num <=0 ? 1 : num;//小于等于0是输出A

  40. while(num > 0){

  41. int m = num %26;

  42. if(m == 0) m = 26;

  43. result = (char)(m + 64) + result;

  44. num = (num-m)/26;

  45. }

  46. return result;

  47. }

  48.  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值