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的程序,谢谢
{
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的程序,谢谢
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了,都忘记了,不知道是否对啊,呵呵!
10411012201160111011701140460990
你调用这个方法就行了,还要怎么写?
{
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;
}
且楼上的程序有内存泄漏,前面一个程序试图返回栈内指针,都有问题。 这段程序的功能是将长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
}