如果一个字串中含有中文和字母,笨的方法还是有一个,对所有的进行全角处理,如a一位转成2位,那样取值截取就不会有什么问题了,我暂时上传一个笨的程序,大家看了以后不要笑我啊。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*打印时对字符转换 wuhongxing*/
void HvpsConvertChar(const char smsg,char * ret_msg)
{
switch (smsg)
{
case '0':
strcpy(ret_msg,"0");
break;
case '1':
strcpy(ret_msg,"1");
break;
case '2':
strcpy(ret_msg,"2");
break;
case '3':
strcpy(ret_msg,"3");
break;
case '4':
strcpy(ret_msg,"4");
break;
case '5':
strcpy(ret_msg,"5");
break;
case '6':
strcpy(ret_msg,"6");
break;
case '7':
strcpy(ret_msg,"7");
break;
case '8':
strcpy(ret_msg,"8");
break;
case '9':
strcpy(ret_msg,"9");
break;
case 'a':
strcpy(ret_msg,"a");
break;
case 'b':
strcpy(ret_msg,"b");
break;
case 'c':
strcpy(ret_msg,"c");
break;
case 'd':
strcpy(ret_msg,"d");
break;
case 'e':
strcpy(ret_msg,"e");
break;
case 'f':
strcpy(ret_msg,"f");
break;
case 'g':
strcpy(ret_msg,"g");
break;
case 'h':
strcpy(ret_msg,"h");
break;
case 'i':
strcpy(ret_msg,"i");
break;
case 'j':
strcpy(ret_msg,"j");
break;
case 'k':
strcpy(ret_msg,"k");
break;
case 'l':
strcpy(ret_msg,"l");
break;
case 'm':
strcpy(ret_msg,"m");
break;
case 'n':
strcpy(ret_msg,"n");
break;
case 'o':
strcpy(ret_msg,"o");
break;
case 'p':
strcpy(ret_msg,"p");
break;
case 'q':
strcpy(ret_msg,"q");
break;
case 'r':
strcpy(ret_msg,"r");
break;
case 's':
strcpy(ret_msg,"s");
break;
case 't':
strcpy(ret_msg,"t");
break;
case 'u':
strcpy(ret_msg,"u");
break;
case 'v':
strcpy(ret_msg,"v");
break;
case 'w':
strcpy(ret_msg,"w");
break;
case 'x':
strcpy(ret_msg,"x");
break;
case 'y':
strcpy(ret_msg,"y");
break;
case 'z':
strcpy(ret_msg,"z");
break;
case 'A':
strcpy(ret_msg,"A");
break;
case 'B':
strcpy(ret_msg,"B");
break;
case 'C':
strcpy(ret_msg,"C");
break;
case 'D':
strcpy(ret_msg,"D");
break;
case 'E':
strcpy(ret_msg,"E");
break;
case 'F':
strcpy(ret_msg,"F");
break;
case 'G':
strcpy(ret_msg,"G");
break;
case 'H':
strcpy(ret_msg,"H");
break;
case 'I':
strcpy(ret_msg,"I");
break;
case 'J':
strcpy(ret_msg,"J");
break;
case 'K':
strcpy(ret_msg,"K");
break;
case 'L':
strcpy(ret_msg,"L");
break;
case 'M':
strcpy(ret_msg,"M");
break;
case 'N':
strcpy(ret_msg,"N");
break;
case 'O':
strcpy(ret_msg,"O");
break;
case 'P':
strcpy(ret_msg,"P");
break;
case 'Q':
strcpy(ret_msg,"Q");
break;
case 'R':
strcpy(ret_msg,"R");
break;
case 'S':
strcpy(ret_msg,"S");
break;
case 'T':
strcpy(ret_msg,"T");
break;
case 'U':
strcpy(ret_msg,"U");
break;
case 'V':
strcpy(ret_msg,"V");
break;
case 'W':
strcpy(ret_msg,"W");
break;
case 'X':
strcpy(ret_msg,"X");
break;
case 'Y':
strcpy(ret_msg,"Y");
break;
case 'Z':
strcpy(ret_msg,"Z");
break;
case ',':
strcpy(ret_msg,",");
break;
case '.':
strcpy(ret_msg,"。");
break;
case '/':
strcpy(ret_msg,"/");
break;
case ' ':
break;
case '<':
strcpy(ret_msg,"<");
break;
case '>':
strcpy(ret_msg,">");
break;
case '?':
strcpy(ret_msg,"?");
break;
case '\\':
strcpy(ret_msg,"\");
break;
case '|':
strcpy(ret_msg,"|");
break;
case ':':
strcpy(ret_msg,":");
break;
case ';':
strcpy(ret_msg,";");
break;
case '[':
strcpy(ret_msg,"[");
break;
case ']':
strcpy(ret_msg,"]");
break;
case '{':
strcpy(ret_msg,"{");
break;
case '}':
strcpy(ret_msg,"}");
break;
case '`':
strcpy(ret_msg,"`");
break;
case '~':
strcpy(ret_msg,"~");
break;
case '!':
strcpy(ret_msg,"!");
break;
case '@':
strcpy(ret_msg,"@");
break;
case '#':
strcpy(ret_msg,"#");
break;
case '$':
strcpy(ret_msg,"¥");
break;
case '%':
strcpy(ret_msg,"%");
break;
case '^':
strcpy(ret_msg,"^");
break;
case '&':
strcpy(ret_msg,"&");
break;
case '*':
strcpy(ret_msg,"*");
break;
case '(':
strcpy(ret_msg,"(");
break;
case ')':
strcpy(ret_msg,")");
break;
case '-':
strcpy(ret_msg,"-");
break;
case '_':
strcpy(ret_msg,"_");
break;
case '=':
strcpy(ret_msg,"=");
break;
case '+':
strcpy(ret_msg,"+");
break;
case '\'':
strcpy(ret_msg,"'");
break;
case '\"':
strcpy(ret_msg,""");
break;
default :
ret_msg[0] = smsg;
ret_msg[1] = 0;
break;
}
}
void HvpsConvertStr(char *buf)
{
char temp[3];
int i, len = strlen(buf);
char *ret_msg = (char*) malloc(2 * len + 1);
memset(ret_msg, 0, 2 * len + 1 );
for (i = 0; i< len ; i++ )
{
if ( (unsigned char)buf[i] < 0x80 ) {
if ( (unsigned char)buf[i] != ' ' )
{
HvpsConvertChar(buf[i], temp);
strcat(ret_msg, temp);
}
} else
strncat(ret_msg, buf + i, 1);
}
strcpy( buf, ret_msg );
free(ret_msg);
}
int substring(char *str,char *substr,int start,int len)
{
char temp[1000];
int i=0;
memset( temp, 0, sizeof(temp));
if(strlen(str)<(start+len))
return (0);
for(i=0;i<len;i++)
temp[i]=str[start+i];
strcpy(substr,temp);
return (0);
}
int formatechar(char *str ,int type)
{
char substr[1000];
int len=0;
int ok=0;
memset( substr, 0, sizeof( substr ));
HvpsConvertStr(str);
len=strlen(str);
switch(type)
{
case 1:
ok=substring(str,substr,0,82);
strcpy(str,substr);
break;
case 2:
ok=substring(str,substr,82,82);
strcpy(str,substr);
break;
case 3:
ok=substring(str,substr,164,82);
strcpy(str,substr);
break;
case 4:
if(len>246)
{
if(len<320)
ok=substring(str,substr,246,len-246);
else
ok=substring(str,substr,246,82);
}
else
strcpy(substr,"");
strcpy(str,substr);
break;
default :
if(len>328)
ok=substring(str,substr,328,len-328);
else
strcpy(substr,"");
strcpy(str,substr);
break;
}
return (0);
}
int formatechar1(char *str )
{
int ok=0;
ok=formatechar(str,1);
return (0);
}
int formatechar2(char *str )
{
int ok=0;
ok=formatechar(str,2);
return (0);
}
int formatechar3(char *str )
{
int ok=0;
ok=formatechar(str,3);
return (0);
}
int formatechar4(char *str )
{
int ok=0;
ok=formatechar(str,4);
return (0);
}
int formatechar5(char *str )
{
int ok=0;
ok=formatechar(str,5);
return (0);
}
void main()
{
char str[1000];
int ok=0;
memset( str, 0, sizeof( str ));
strcpy(str,"汇票号码:08866228出票金额:100000.00出票日期:20090728汇票到期日:20100128出票人名称:慈溪市百花电器厂收款人名称:上海娜美电器有限公司付款行名称名称:宁波交行是否你行签发有无挂止付冻他查,上述信息给予核实,为谢!");
//ok=formatechar1(str);
ok=formatechar2(str);
//ok=formatechar3(str);
//ok=formatechar4(str);
printf(str);
printf("\n");
exit(0);
}
分享到:
相关推荐
1. **全角字符**:全角字符主要指在东亚语言环境中使用的字符类型,它们通常占据两个字节的位置(即一个汉字的宽度)。全角字符包括全角数字、全角字母、全角标点符号等。 2. **半角字符**:半角字符则是指在西文中...
然而,简单的基于字符数量的截取方法在处理包含全角和半角字符的字符串时可能会出现问题。例如,在中文环境下,一个汉字占两个字符位置,而英文字符只占一个字符位置。如果按照字符数量来截取,可能会导致截取后的...
在处理文本数据时,尤其是在需要确保数据安全性与准确性的场合下,判断字符串中是否含有中文字符或全角字符是非常重要的。以下是一些关键知识点: #### 1. 正则表达式基础 正则表达式是一种强大的文本处理工具,...
- **字符宽度的精确控制**:某些特殊字符(如全角英文字符)在显示宽度上与中文字符相同,但未被此方法正确处理。可以考虑进一步细化规则以更准确地控制显示宽度。 通过以上分析,我们可以看到,该方法有效地解决了...
### PHP UTF-8 等宽度截取中英文字符知识点详解 #### 一、背景介绍 ...通过以上内容的学习,可以有效地解决在处理多语言文本时遇到的字符截取问题,特别是在中文环境下,确保字符串截取的准确性及美观性。
通过以上的知识点,我们可以了解到按字节截取字符串在JavaScript编程中是一个重要的应用场景,特别是在处理中文等多字节字符时,它能够保证字符串截取的正确性和准确性。提供的代码示例和方法对处理类似的字符串操作...
在进行字符串处理的时候,尤其是涉及到中英文混合的情况,如何正确地截取字符串是一门技术活。在Java语言中,字符串的处理是常见的需求,尤其是在文本数据的处理和网络通信过程中,正确地截取中英文混合的字符串显得...
而对于大部分的中文汉字,它们则通常需要两个或更多的字节来表示。具体来说: - 占用1个字节的:ASCII字符,包括数字和英文字母。 - 占用2个字节的:部分特殊字符,如全角符号、日韩文等。 - 占用3个字节的:大多数...
1. **字符串处理**:易语言提供了丰富的字符串操作命令,如获取字符串长度、截取字符串、替换字符串等,这些命令在处理汉字首拼音时必不可少。 2. **汉字转拼音**:易语言虽然不直接提供汉字转拼音的内置函数,但...
此外,与英文字符相比,中文字符和全角符号在显示时所占的空间不同,因此截取时需要按照字符的实际显示宽度来计算。 ### HTML代码串的特殊性 在处理HTML代码串时,需要特别注意HTML标签的存在。截取时不仅要保留...
这个函数专为处理中文字符而设计,它支持多种字符集,并能处理全角字符。`msubstr`函数的使用方法如下: ```html {$vo.title|msubstr=5,5,’utf-8′,true} ``` 参数解析: - `$str`: 需要截取的字符串,这里是`...
在PHP开发中,处理中文字符串时经常会遇到一个问题:当截取字符串时,由于UTF-8编码的中文字符占用3个字节,如果截取的长度导致最后一个字符不完整,就会显示为“?号”。这个问题在处理中英文混合的字符串时尤为突出...
针对这个问题,文章提供了第二个示例,即自定义函数substr_cut(),这个函数可以在截取时考虑中文字符(全角字符)的长度,从而避免出现乱码。 自定义函数substr_cut()的实现逻辑是:先判断截取的字符串长度是否超过...
在Java编程语言中,获取汉字的拼音是一项常见的需求,特别是在处理中文字符串时,例如搜索、排序或者构建用户友好的URL。本篇文章将深入探讨如何利用Java实现这一功能,结合提供的两个源码文件`GB2Alpha.java`和`...
这可能意味着我们需要一个布尔变量或函数,来控制是否对字符串中的汉字进行特殊处理。在Java中,我们可以创建一个`boolean`变量如`allowChinese`,或者一个方法`isChineseAllowed()`来实现这一功能。 接着,我们...
在Web开发过程中,经常需要对字符串进行处理,比如截取字符串以便更好地展示数据或优化用户体验。ASP.NET作为一种广泛使用的Web开发框架,提供了多种方法来实现字符串截取功能。本文将详细介绍一个具体的ASP.NET字符...
在PHP编程中,处理字符串截取时,经常会遇到编码的问题,特别是当字符串包含中文字符时。本示例主要探讨如何正确地截取UTF-8和GBK编码的中英文字符串,以适应特定的需求,例如微博的字数限制规则。 首先,我们要...
在UTF-8编码中,英文字符通常占用1个字节,而中文字符则占用3个字节。因此,在截取字符串时,需要注意字符长度的计算方式,以免出现截取错误。 PHP提供了多种函数来处理字符串,其中`mb_substr()`函数用于多字节...
本文将详细介绍如何使用jQuery实现一个字符输入个数的判断功能,并在超过指定长度时自动进行截取处理。具体而言,该功能会根据不同的字符类型来计算长度:对于数字和英文字母,每个字符计为1个单位;而对于中文字符...