免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3147 | 回复: 10
打印 上一主题 下一主题

字符分割 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-18 13:29 |只看该作者 |倒序浏览
在unix下(具体是什么C编辑器我也不是很清楚)现有个字符串(内有数字,字母,中文,有标点) 分成长度大约相等的字符串输出不会出现乱码
用C怎么解决这个问题~~我是一个新手
比如字符串:"a我是一个新手,大家帮帮我,xiexie,大家给个意见,是Unix系统下的。"
现分成每行大约12个字节(6个汉字宽过)输出

[ 本帖最后由 q2500 于 2007-8-18 15:34 编辑 ]

论坛徽章:
1
操作系统版块每日发帖之星
日期:2015-07-11 22:20:00
2 [报告]
发表于 2007-08-18 13:41 |只看该作者
给你个提示吧
linux下面使用utf8编码
一个全角字符占用3byte
全角字符这个3个byte中
每个byte的高1位都是1
西文字符是0

你看着办吧
送你段代码

论坛徽章:
1
操作系统版块每日发帖之星
日期:2015-07-11 22:20:00
3 [报告]
发表于 2007-08-18 13:42 |只看该作者
bool isEnglish(char ch)

       {

               return ( (ch & 0x80) ? false : true );

       }


如果不是西文字符
则连续输出三次
就达到输出一个全角字符的效果了

另外,标点符号还是数字还是英文这些,自己看cctype.h

论坛徽章:
1
操作系统版块每日发帖之星
日期:2015-07-11 22:20:00
4 [报告]
发表于 2007-08-18 13:43 |只看该作者
原帖由 cst05001 于 2007-8-18 13:42 发表
bool isEnglish(char ch)

       {

               return ( (ch & 0x80) ? false : true );

       }

C里面没有bool
你改成int, 0 ,1

论坛徽章:
0
5 [报告]
发表于 2007-08-18 14:16 |只看该作者
原帖由 cst05001 于 2007-8-17 21:41 发表
给你个提示吧
linux下面使用utf8编码
一个全角字符占用3byte
全角字符这个3个byte中
每个byte的高1位都是1
西文字符是0

你看着办吧
送你段代码


utf8编码每个字符的字节数是可变的,可以是1,2,或者3。不过根据第一个字节就可以知道该字符占用几个字节。

论坛徽章:
0
6 [报告]
发表于 2007-08-18 14:22 |只看该作者
对应GB2312编码的

  1. #include <stdio.h>
  2. #include <string.h>

  3. int main() {
  4.         const char str_with_hz[] = "a我是一个新手,大家帮帮我,xiexie,大家给个意见,是Unix系统下的。";
  5.         char strs[13][6];
  6.         int index = 0;
  7.         printf("%s\nsize: %d\n“我”字的GB2312编码: %d %d\n", str_with_hz, sizeof(str_with_hz), str_with_hz[1], str_with_hz[2]);
  8.         memset(strs, 0, 13*6);
  9.         for(int i=0; i<6; ++i) {
  10.                 int ascii_count = 0;
  11.                 for(int j=0; j<12; ++j) {
  12.                         if( str_with_hz[index+j] >= 0 ) {
  13.                                 ++ascii_count;
  14.                         }
  15.                 }
  16.                 if( ascii_count%2 == 0 ) {
  17.                         memcpy(strs[i], &str_with_hz[index], 12);
  18.                         index += 12;
  19.                 }else {
  20.                         memcpy(strs[i], &str_with_hz[index], 11);
  21.                         index += 11;
  22.                 }
  23.                 printf("%d, %s\n", index, strs[i]);
  24.         }
  25.         return 0;
  26. }
复制代码


瞎写的,不对之处请指教!

[ 本帖最后由 funcman 于 2007-8-18 14:24 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2007-08-18 14:23 |只看该作者
看来不行啊,在UNIX下都是UTF-8

论坛徽章:
1
操作系统版块每日发帖之星
日期:2015-07-11 22:20:00
8 [报告]
发表于 2007-08-18 14:56 |只看该作者
原帖由 emacsnw 于 2007-8-18 14:16 发表


utf8编码每个字符的字节数是可变的,可以是1,2,或者3。不过根据第一个字节就可以知道该字符占用几个字节。

那么怎么判断是2byte还是3byte呢?

论坛徽章:
0
9 [报告]
发表于 2007-08-18 15:13 |只看该作者
原帖由 cst05001 于 2007-8-17 22:56 发表

那么怎么判断是2byte还是3byte呢?


刚看了一下,utf8编码最多是4个byte:

Binary         Hexadecimal         Decimal         Width
00000000-01111111         0-7F         0-127         1 byte
11000010-11011111         C2-DF         194-223         2 bytes
11100000-11101111         E0-EF         224-239         3 bytes
11110000-11110100         F0-F4         240-244         4 bytes

论坛徽章:
0
10 [报告]
发表于 2007-08-18 16:50 |只看该作者

谢谢

谢谢各位大哥大姐~~明天到机子上去试试~~看能不能实现
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP