请问,怎么一个字符一个字符的读取中英文混合文本?
本帖最后由 zhou007jie 于 2015-10-09 15:37:04 编辑
要一个字符一个字符的读取中英文混合的文本文件,要怎么写代码呢?
比如:
文本内容:d大家好,我是Tom!
如何逐个字符读取,第一次读取d,
第二次读取”大“,
第三次读取”家“,
……
纯C语言实现,最好读取utf8格式,谢谢!
------解决思路----------------------
#include
#include
int main()
{
FILE* fp = fopen("test.txt", "wt+,ccs=UTF-8");
char* s = "hello, 你好!";
fwrite(s, sizeof(char), strlen(s), fp);
fclose(fp);
return 0;
}
------解决思路----------------------
运行情况见http://ideone.com/vq7WVD
代码
#include
#define GetBit(num, n) ((num) >> (n) & 1)
int GetByteType(int c) // 0表示附属字节,1表示1字节字符,2表示2字节字符的头部
{
if (GetBit(c, 7) == 0) return 1;
else if (GetBit(c, 6) == 0) return 0;
else if (GetBit(c, 5) == 0) return 2;
else if (GetBit(c, 4) == 0) return 3;
else if (GetBit(c, 3) == 0) return 4;
else if (GetBit(c, 2) == 0) return 5;
else if (GetBit(c, 1) == 0) return 6;
else return -1;
}
int main()
{
int c;
int count, max;
for (; (c = fgetc(stdin)) != EOF;)
{
switch (GetByteType(c))
{
case 0: putchar(c); ++count; if (count == max) putchar('\n');break;
case 1: putchar(c); putchar('\n'); break;
default: putchar(c); count = 1; max = GetByteType(c); break;
}
}
return 0;
}