请教高手,请问一个字符串的问题

时间:2008-07-23 16:32:36   来源:论坛整理  作者:  编辑:chinaitzhe
谁知道,有没有下面要求的现成的代码实现??开源组件也行

对于任何一个字符串,例如"ABC",输出接下来的n个字符串,例如n=3,即ABD,ABE,ABF
"ZZY" ,输出接下来的4个字符串: ZZZ,AAAA,AAAB,AAAC

在线等待!请教高手!
网友回复:此回复为自动发出,仅用于显示而已,并无任何其他非凡作用
楼主【dvkc】截止到2008-07-23 11:21:51的历史汇总数据(不包括此帖):
发帖的总数量:7 发帖的总分数:450 每贴平均分数:64
回帖的总数量:8 得分贴总数量:1 回帖的得分率:12%
结贴的总数量:7 结贴的总分数:450
无满足结贴数:2 无满足结贴分:120
未结的帖子数:0 未结的总分数:0
结贴的百分比:100.00% 结分的百分比:100.00%
无满足结贴率:28.57 % 无满足结分率:26.67 %
敬礼!
网友回复:一个有进位的ascii码加减问题

网友回复:这个还是自己写吧,这是什么需求,呵呵。
网友回复:学习···
网友回复:把A,B等26个字母考虑成数,然后把字符串当成26进制的数就可以了,自己写一个简单的加1算法,考虑满26的时候进位,不麻烦
网友回复:自己写了一个,但是感觉逻辑上的递归有些复杂啊,呵呵,所以想看看有没有什么简单的想法!
网友回复:
引用 2 楼 reality 的回复:
一个有进位的ascii码加减问题

能说具体一些吗??
网友回复:
引用 5 楼 ZangXT 的回复:
把A,B等26个字母考虑成数,然后把字符串当成26进制的数就可以了,自己写一个简单的加1算法,考虑满26的时候进位,不麻烦


假如n很大的情况就比较复杂啊!
网友回复:
引用 8 楼 dvkc 的回复:
假如n很大的情况就比较复杂啊!

再大也是每次加1,怕什么.
只要实现一个简单的加1算法就可以了.
网友回复:
引用 9 楼 ZangXT 的回复:
引用 8 楼 dvkc 的回复:
假如n很大的情况就比较复杂啊!

再大也是每次加1,怕什么.
只要实现一个简单的加1算法就可以了.


恩,我想复杂了,呵呵,谢谢!
网友回复:我做了一个取下一个字符串的方法:
public String getNextString(String next) {
char[] ac = next.toCharArray();
boolean flag = true;
StringBuffer buffer = new StringBuffer();
for (int i = (ac.length-1); i >= 0; i--) {
if (i == 0 && flag && (ac[0]-'Z' == 0)) {
buffer.append("AA");
break;
}
if (flag) {
if (ac[i] - 'Z' == 0) {
buffer.append('A');
} else{
buffer.append(getNextChar(ac[i]));
flag = false;
}
} else {
buffer.append(ac[i]);
}
}

return buffer.reverse().toString();
}
网友回复:
Java code





Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/





    public static void main(String[] args)throws Exception {

        

        String str = "ABC";

        char[] str_char = str.toCharArray();

        char temp;

        boolean over = false;

        while(!over){

            over = setChar(str_char.length-1,str_char);

            if(!over)

                System.out.println(getCharArrayString(str_char));

        }

    }

    

    public static boolean setChar(int index,char[] chars){        

        if(index>=0){

            char temp = chars[index];

            temp  ;

            if(temp>'Z'){

                temp = 'A';

                chars[index] = temp;

                index = index - 1;

                return setChar(index, chars);

            }else{

                chars[index] = temp;

                return false;

            }

        }else{

            return true;

        }

    }

    public static String getCharArrayString(char[] chars){

        StringBuffer sb = new StringBuffer();

        sb.append(chars);

        return sb.toString();

    }

    






网友回复:写了个 比较简单的! 假如你要支持指定的字符串长度! 改下代码 把str_char的长度 改成你想要的长度就可以了
网友回复:首先:
A-Z有一个1-26的映射表
取得字符串例如 AAZ 1,1,26
对应的
算法
s = 1* 26的平方 1 * 26 26
得到值 for i = 1 to n
s = 1* 26的平方 1 * 26 26 i
转化为26进制,算法可参照转化2进制,具体不说了
例如转化为
1,1,1,1
则通过对应表
取得
AAAA
对应表可以考虑HashTable,数组均可阿。


具体代码不写了。
网友回复:上面的s要足够大阿。。呵呵 long差不多
要不然溢出可麻烦了
网友回复:比如:

char[] str_char = str.toCharArray();

改成

Java code





Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/



char[] str_char = new char[4];

str.getChars(0, str.length(), str_char, 0);


网友回复:这样!!!!!

比如:

char[] str_char = str.toCharArray();

改成
Java code





Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/



char[] str_char = new char[4];

str.getChars(0, str.length(), str_char, 0);

str_char[3] = 'A'-1;


网友回复:有些乱,凑合能工作
Java code





Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/





public class Main {



    public static void main(String args[]) {

        String test="ZZZ";

        for(int i=0;i<=3;i  ){

            test=addOne(test);

            System.out.println(test);

        }

    }

    public static String addOne(String seq){

        char []buf=seq.toCharArray();

        int count=1;

        for (int i = buf.length-1; i >=0; i--) {

            buf[i]=(char)(buf[i] count);

            if(buf[i]>'Z'){

                buf[i]='A';

                count=1;

            }else{

                count=0;

                break;

            }

        }

        if(count==1){

            char[] buf2=new char[seq.length() 1];

            buf2[seq.length()]='A';

            for (int i = seq.length()-1; i >=0; i--) {

              buf2[i]=buf[i];                

            }

            buf=buf2;

        }

        return new String(buf);

    }

}






网友回复:感觉用进制比较轻易理解。
网友回复:
Java code





Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/





package testtest;



public class Main {



    public static void main(String args[]) {

        //测试

        String test = "AAAZ";

        int n = 4;//你指定的n

        for (int i = 0; i < n; i  ) {

            test = addOne(test);

            System.out.println(test);

        }

    }

    //实现字符串的加1操作

    public static String addOne(String seq) {

        char[] buf = seq.toCharArray();//转换为数组轻易处理

        int count = 1;  //开始需要加1

        for (int i = buf.length - 1; i >= 0; i--) {//从最后一个字符开始处理

            buf[i] = (char) (buf[i]   count);//加1

            if (buf[i] > 'Z') {   //有进位

                buf[i] = 'A';

                count = 1;   //进位

            } else {

                count = 0;

                break;  //无进位直接跳出循环

            }

        }

        if (count == 1) {  //进位使数组长度增加1个的情况处理

            char[] buf2 = new char[seq.length()   1];

            buf2[seq.length()] = 'A';//最高位肯定是A

            for (int i = seq.length() - 1; i >= 0; i--) {

                buf2[i] = buf[i];

            }

            buf = buf2;

        }

        return new String(buf);

    }

}






网友回复:你是想计算EXCEL的列值吧? 我用26进制的方式写过,可以实现的.
网友回复:!markit!
关键字:请教,高手,请问,一个,字符串,问题,

相关文章

文章评论

共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面