private String eqv(String s)
    {
        if(s == null)
            return "null";
        if(s.equals(""))
            return "null";
        int ai[] = new int[16];
        char ac[] = s.toCharArray();
        int i = 0;
        for(int j = 0; j < ai.length && j < ac.length; j++)
        {
            ai[i] = ac[j];
            if((i += 2) >= ai.length)
                i = 1;
        }        String s1 = "";
        for(int k = 0; k < ai.length; k++)
            s1 = s1 + ai[k];        return s1;
    }
最好能够翻译成c或delphi的程序,谢谢

解决方案 »

  1.   

    eqv(ch)
    char ch[16];
    {
       if(strlen(ch)==0)
             return NULL;
       int i=0,j;
       int ai[16]
       for(j=0;j<strlen(ch);j++)
       {
           ai[j]=ch[i];
           if((i += 2) >= 16)
                    i = 1;
       }
       char ch2[16];
       for(int k = 0; k < 16; k++)
                ch2[i]=ai[i];
      return ch2;
    ]这是c的,很久没用c了,都忘记了,不知道是否对啊,呵呵!         
      

  2.   

    好像不行:( 这是一段加密程序 比如hztour.cn他的结果是
    10411012201160111011701140460990
      

  3.   

    帮我做一个java程序也行,只要能够有输入框输入s,结果返回s1就行
      

  4.   

    你那个不就是java程序吗?
    你调用这个方法就行了,还要怎么写?
      

  5.   

    我一点java都不懂的,最好是一个可执行的程序啊,我直接用就行
      

  6.   

    char* eqv(char * s)
        {
            if(s == 0)
                return 0;
            if(s[0]==0)
                return 0;
            int *ai = new int[16];
            int i = 0;
            for(int j = 0; j < 16 && j < strlen(s); j++)
            {
                ai[i] = s[j];
                if((i += 2) >= 16)
                    i = 1;
            }        char* s1 = new char[17];
            int k;
            for(k = 0; k < 16; k++)
                s1[k] =  ai[k];
            s1[k]=0;
            return s1;
        }
      

  7.   

    上面的两个程序都不能满足要求,因为两个程序返回的都是错后字符串,未进行内码变换。
        且楼上的程序有内存泄漏,前面一个程序试图返回栈内指针,都有问题。    这段程序的功能是将长16的串进行变换,前8个字符放在奇数位置,后8个字符放在偶数位置,不足16个字符则放0    再将变换后的字符的 unicode 码以十进制字符的形式输出成一个串    如 01234567ABCDEFG 先换成 0A1B2C3D4E5F6G7H,再将其unicode码输出成串(空格是我加的)
        48  65  49  66  50  67  51  68  52  69  53  70  54  71  55  72    所以转换成C后会有问题,JAVA采用的是unicode码,但C里默认字符以ACSII码存储的。转换西文时问题还不大,但处理双字节字符时会当作两个字符处理,与原程序就有区别了。    有一个解决的方法是在 VC 中用 wchar_t 字符类型,编译时加上 UNICODE 选项,改过后对字符串处理的函数有所不一样,下面的程序需要改动才行。
    // 这个程序是用 TC2 编译的,当然也可以用VC编译,但注释1、2两处理有可能要去掉#include <stdio.h>
    #include <string.h>
    #include <conio.h>  // 1char* eqv(char *dest, char *src)
    {
        int j, tmp;
        int len = strlen(src);
        char *p = dest;    if(src == 0 || *src == '\0')
            return 0;    for(j=0; j<8 && j<len; ++j)
        {
            // 前8个字符
            sprintf(p, "%d  ", *(src+j)); //为了使输出清楚,%d我故意加了两个空格
            // 指针移到串尾
            while(*p != '\0')
                ++p;        // 后8个字符
            tmp = j+8 > len ? 0 : (int)(*(src+j+8));
            sprintf(p, "%d  ", tmp);
            // 指针移到串尾
            while(*p != '\0')
                ++p;
        }    return dest;
    }void main()
    {
        int i=0;
        char s1[] = "01234567ABCDEFGH";
        char s2[80];
        printf("%s\n", eqv(s2, s1));    getch(); // 2
    }