编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字
编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF...
编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
展开
4个回答
展开全部
public static boolean isLetter(char c){
int k=0X80;
return c/k==0?true:false;
}
public static int lengths(String strSrc){
if (strSrc==null){
return 0;
}
int len=0;
char[] strChar=strSrc.toCharArray();
for (int i=0;i<strChar.length;i++){
len++;
if (!isLetter(strChar[i])) len++;
}
return len;
}
public static String subString(String origin,int len){
if (origin==null || origin.equals("")|| len<1){
return "";
}
if (len>lengths(origin)){
return origin;
}
byte[] strByte=new byte[len];
System.arraycopy(origin.getBytes(),0,strByte,0,len);
int count=0;
for (int i=0;i<len;i++){
int value=(int)strByte[i];
if (value<0) count++;
}
if (count % 2 !=0){
len=(len==1)?++len:--len;
}
return new String(strByte,0,len);
}
public static void main(String[] args) {
System.out.println(""+ subString("我ABC汉DEF",6));
}
int k=0X80;
return c/k==0?true:false;
}
public static int lengths(String strSrc){
if (strSrc==null){
return 0;
}
int len=0;
char[] strChar=strSrc.toCharArray();
for (int i=0;i<strChar.length;i++){
len++;
if (!isLetter(strChar[i])) len++;
}
return len;
}
public static String subString(String origin,int len){
if (origin==null || origin.equals("")|| len<1){
return "";
}
if (len>lengths(origin)){
return origin;
}
byte[] strByte=new byte[len];
System.arraycopy(origin.getBytes(),0,strByte,0,len);
int count=0;
for (int i=0;i<len;i++){
int value=(int)strByte[i];
if (value<0) count++;
}
if (count % 2 !=0){
len=(len==1)?++len:--len;
}
return new String(strByte,0,len);
}
public static void main(String[] args) {
System.out.println(""+ subString("我ABC汉DEF",6));
}
展开全部
void get_string(char *s,int n)
{
int i,t=0;
for (i=0;i<n ;i++)
{
if(s[n]&0x80) t++;
}
if(t%2)n--;
s[n] = 0;
printf("%s",s);
}
{
int i,t=0;
for (i=0;i<n ;i++)
{
if(s[n]&0x80) t++;
}
if(t%2)n--;
s[n] = 0;
printf("%s",s);
}
追问
呃 ,抱歉。这个要用java实现的。。还是谢谢您啊。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h>
#include <string.h>
#include <malloc.h>
char *GetSubString(char *res, int size)
{
int i, j;
int len = strlen(res);
// char *des = new char[len+1];
char *des = (char*) malloc(len+1);
/* if (size > len)
{
size = len;
}
else if (size<0)
{
size = 0;
} */
for (i=0, j=0; i<size; i++, j++)
{
/*汉字是使用两个字节来存放的,如果高位字节的最高位为1那么就是汉字了*/
/*也可以用 res[i]<0 作为条件*/
if( (~(res[i]>>8)) == 0 )
{
size+=1;
des[j] = res[i];
j++;
i++;
}
des[j] = res[i];
}
des[j]=0;
return des;
}
void main()
{
char str[256] = "彼bi岸an花开huakai";
char *p = GetSubString(str, 6);
printf("%s\n", p);
// delete[] p;
free(p);
}
#include <string.h>
#include <malloc.h>
char *GetSubString(char *res, int size)
{
int i, j;
int len = strlen(res);
// char *des = new char[len+1];
char *des = (char*) malloc(len+1);
/* if (size > len)
{
size = len;
}
else if (size<0)
{
size = 0;
} */
for (i=0, j=0; i<size; i++, j++)
{
/*汉字是使用两个字节来存放的,如果高位字节的最高位为1那么就是汉字了*/
/*也可以用 res[i]<0 作为条件*/
if( (~(res[i]>>8)) == 0 )
{
size+=1;
des[j] = res[i];
j++;
i++;
}
des[j] = res[i];
}
des[j]=0;
return des;
}
void main()
{
char str[256] = "彼bi岸an花开huakai";
char *p = GetSubString(str, 6);
printf("%s\n", p);
// delete[] p;
free(p);
}
追问
呃 ,抱歉。这个要用java实现的。。还是谢谢您啊
追答
class GetSubString
{
public static void getsubstring(char res[], char des[], int size)
{
int i;
for (i=0; i<size; i++)
{
des[i] = res[i];
}
}
/* public static void getsubstring(char res[], int size)
{
// res.length = size;
} */
public static void main(String[] args)
{
/* 在java中任何一个数组都有一个length属性并且是final
也就是说不能改变length的值,所以就没有字符串的结束
标志,因此是无法对字符串进行截断[用char定义的字符串]
下边提供两种方法均可, 如果谁研究出了解决方案请致邮件
到316261656@qq.com */
// 1
/*
String str = "彼bi岸an花hua开kai";
String temp = str.substring(0, 6);
// result: 彼bi岸an
System.out.println(temp); */
// 2
String s = "彼bi岸an花hua开kai";
char[] str = s.toCharArray();
char[] temp = new char[128];
// result: 彼bi岸an
getsubstring(str, temp, 6);
System.out.println(temp);
/* String s = "彼bi岸an花hua开kai";
char[] str = s.toCharArray();
getsubstring(str,6);
System.out.println(str); */
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询