C语言如果提取文件中的汉字、中文标点、数字,?谢谢

pengfangxu8 2011-12-12 03:43:11
如题,将一个文本文件的中汉字、中文标点、数字提取出来,然后输入另一个文件中,比如输入2.txt,然后将这个文件中的汉字、中文标点、数字保存在3.txt中,谢谢各位大侠,谢谢了!小弟真不会,谢谢各位!
...全文
702 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2011-12-14
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 pengfangxu8 的回复:]
追问,请问位有c或者c++ utf-8转换到gb2312的代码,函数之类的,谢谢各位哦!
[/Quote]
http://topic.csdn.net/u/20111214/16/b8ac67c1-423d-4b92-92b7-eb7700c0b268.html
pengfangxu8 2011-12-14
  • 打赏
  • 举报
回复
追问,请问位有c或者c++ utf-8转换到gb2312的代码,函数之类的,谢谢各位哦!
赵4老师 2011-12-13
  • 打赏
  • 举报
回复
//将2.txt这个文件中的汉字、中文标点、数字保存在3.txt中
//比如
//2.txt文件的内容是:
//hi,大家好!我们都是中国人,123我们一起加油!@#$%hgfhgf
//谢谢您帮我解决这个问题!谢谢您!非常感谢!thank you very much!
//那么经过处理后3.txt的内容是:
//大家好!我们都是中国人,123我们一起加油!
//谢谢您帮我解决这个问题!谢谢您!非常感谢!
#include <stdio.h>
#include <stdlib.h>
FILE *fi,*fo;
int c1,c2;
void main() {
fi=fopen("2.txt","rb");
if (NULL==fi) {
printf("Can not open file 2.txt!\n");
return;
}
fo=fopen("3.txt","w");
while (1) {
c1=fgetc(fi);
if (EOF==c1) break;
if ('0'<=c1 && c1<='9' || '\r'==c1 || '\n'==c1) {
fputc(c1,fo);
continue;
}
if (0x81u<=c1 && c1<=0xFEu) {
c2=fgetc(fi);
if (EOF==c2) break;
fputc(c1,fo);
fputc(c2,fo);
continue;
}
}
fcloseall();
}

utf8编码的话用记事本打开另存为ANSI编码即可。或者用convertz软件转换一下。
pengfangxu8 2011-12-13
  • 打赏
  • 举报
回复
谢谢您,我这儿是乱码,那些待提取的文件编码有gb2312和utf-8,可能是因为我没有表达清楚的原因,不是将数字标点文字分开存,是将源文件中的汉字、中文标点、数字、换行符保留,
比如,2.txt文件的内容是:

hi,大家好!我们都是中国人,123我们一起加油!@#¥%hgfhgf
谢谢您帮我解决这个问题!谢谢您!非常感谢!thank you very much!

那么经过处理后3.txt的内容是:

大家好!我们都是中国人,123我们一起加油!
谢谢您帮我解决这个问题!谢谢您!非常感谢!

需要说明的是2.txt的编码方式有可能是gb2312和utf-8,再麻烦您帮我解决下,谢谢您!
赵4老师 2011-12-12
  • 打赏
  • 举报
回复
运行通过的版本
//将2.txt这个文件中的汉字、中文标点、数字保存在3.txt中
//GBK汉字内码范围(不包括A1xx~A9xx的标点符号英文字母特殊符号等)
//区码 ,位码
//81-A0 ,40-7E 80-FE
//AA-AF ,40-7E 80-A0
//B0-D6 ,40-7E 80-FE
//D7 ,40-7E 80-F9
//D8-F7 ,40-7E 80-FE
//F8-FE ,40-7E 80-A0
#include <stdio.h>
#include <stdlib.h>
FILE *fi,*fh,*fb,*fs;
int c1,c2;
void main() {
fi=fopen("2.txt","rb");
fh=fopen("hz.txt","w");
fb=fopen("bd.txt","w");
fs=fopen("sz.txt","w");
while (1) {
c1=fgetc(fi);
if (EOF==c1) break;
if ('0'<=c1 && c1<='9') {
fputc(c1,fs);
continue;
}
if (0xA1u<=c1 && c1<=0xA9u) {
c2=fgetc(fi);
if (EOF==c2) break;
fputc(c1,fb);
fputc(c2,fb);
continue;
}
if (0x81u<=c1 && c1<=0xFEu) {
c2=fgetc(fi);
if (EOF==c2) break;
fputc(c1,fh);
fputc(c2,fh);
continue;
}
}
fprintf(fh,"\n");
fprintf(fb,"\n");
fprintf(fs,"\n");
fcloseall();
system("copy hz.txt+bd.txt+sz.txt 3.txt >NUL 2>NUL");
system("del hz.txt");
system("del bd.txt");
system("del sz.txt");
}
赵4老师 2011-12-12
  • 打赏
  • 举报
回复
FILE *fi,*fh,*fb,fs;
应该为
FILE *fi,*fh,*fb,*fs;
赵4老师 2011-12-12
  • 打赏
  • 举报
回复
没实际编译链接调试,不保证对,仅供参考:
//将2.txt这个文件中的汉字、中文标点、数字保存在3.txt中
//GBK汉字内码范围(不包括A1xx~A9xx的标点符号英文字母特殊符号等)
//区码 ,位码
//81-A0 ,40-7E 80-FE
//AA-AF ,40-7E 80-A0
//B0-D6 ,40-7E 80-FE
//D7 ,40-7E 80-F9
//D8-F7 ,40-7E 80-FE
//F8-FE ,40-7E 80-A0
#include <stdio.h>
#include <stdlib.h>
FILE *fi,*fh,*fb,fs;
int c1,c2;
void main() {
fi=fopen("2.txt","rb");
fh=fopen("hz.txt","w");
fb=fopen("bd.txt","w");
fs=fopen("sz.txt","w");
while (1) {
c1=fgetc(fi);
if (EOF==c1) break;
if ('0'<=c1 && c1<='9') {
fputc(c1,fs);
continue;
}
if (0xA1u<=c1 && c1<=0xA9u) {
c2=fgetc(fi);
if (EOF==c2) break;
fputc(c1,fb);
fputc(c2,fb);
continue;
}
if (0x81u<=c1 && c1<=0xFEu) {
c2=fgetc(fi);
if (EOF==c2) break;
fputc(c1,fh);
fputc(c2,fh);
continue;
}
}
fprintf(fh,"\n");
fprintf(fb,"\n");
fprintf(fs,"\n");
fcloseall();
system("copy hz.txt+bd.txt+sz.txt 3.txt");
}
pengfangxu8 2011-12-12
  • 打赏
  • 举报
回复
谁能给这样的例子,给一个嘛,谢谢,不限语言,麻烦您们了!
赵4老师 2011-12-12
  • 打赏
  • 举报
回复
//GBK汉字内码范围(不包括A1xx~A9xx的标点符号英文字母特殊符号等)
//区码 ,位码
//81-A0 ,40-7E 80-FE
//AA-AF ,40-7E 80-A0
//B0-D6 ,40-7E 80-FE
//D7 ,40-7E 80-F9
//D8-F7 ,40-7E 80-FE
//F8-FE ,40-7E 80-A0

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧