C++读文件怎么跳过标点和特殊符号,直接读到自己要的部分?

读入一系列两元组数据<姓名,成绩>,生成一个排序的五元组<姓名,总分,平均分,最低分,最高分>,并将排序结果按照姓名的降序生成到文件。

文件举例:
Input files: In_1.txt
<aaa,11>
<bbb,22>
<ccc.12>
<aaa,23>
<bbb,25>

Output files: [Your New Student No.]_1_out.txt
<ccc,12,12,12,12>
<bbb,47,23.5,22,25>
<aaa,34,17,11,23>

根据文件特点,采取相应策略
<aaa,11> // 跳一个字符,读3个字符,跳一个字符,读1个整型,换行
<bbb,22>
<ccc.12> // 跳一个字符,读3个字符,跳一个字符(我不怕你改用点号),读1个整型
<aaa,23>
<bbb,25>
每行都符合这个规律,我可以用循环语句
#include<stdio.h>
main()
{
FILE *fin;
int i,n;
char s[10][5];
int v[10];
fin=fopen("in_1.txt","r");
n=0;
while ( fscanf(fin,"%*c%3s%*c%d%*s\n",s[n],&v[n]) == 2) n++;
fclose(fin);
for (i=0;i<n;i++) printf("%s %d\n",s[i],v[i]);
return 0;
}
==
关键是这句:
while ( fscanf(fin,"%*c%3s%*c%d%*s\n",s[n],&v[n]) == 2) n++;
%*c -- 跳一个字符
%*s\n -- 跳过剩余字符串
== 2 -- 成功读到2个参数
=========
<bbb,47,23.5,22,25> 尝试:
"%*c%3s%*c%f,%f,%f,%f%*s\n",s[n],&v1[n],&v2[n],&v3[n],&v4[n]
用 == 5
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-06-15
可以利用条件句加ASCII码进行选择

C++读文件怎么跳过标点和特殊符号,直接读到自己要的部分?
根据文件特点,采取相应策略 <aaa,11> \/\/ 跳一个字符,读3个字符,跳一个字符,读1个整型,换行 <bbb,22> <ccc.12> \/\/ 跳一个字符,读3个字符,跳一个字符(我不怕你改用点号),读1个整型 <aaa,23> <bbb,25> 每行都符合这个规律,我可以用循环语句 include<stdio.h> main()...

C++中,使用MapViewOfFile对文件进行映像,如何按整数读取映像文件的内容...
1. 你要读取的整数是8位,16位,还是32位,是无符号还是有符号?需要使用对应的类型,8位是char,16位是short,32位是int。如果使用了int,实际上是一次读四个字节,当作32位整数处理。如果你是要读八位的字节(无符号类型)的话,那应该用unsigned char,然后转化成int:char * base = (char*)...

如何使用C++的读取文件流读取一个24位真彩色的BMP文件到一个数组...
1.读取文件。使用System.IO命名空间加的一个类库。读取一个文件可以按文本的方式读取,也可以按二进制流的方式读取,按二进制流的方式读取,返回的结果就是一个字节数组。byte[] bmps = System.IO.File.ReadAllBytes("a.bmp");2.所谓路径。路径是文件系统的一个概念,对于一个Windows文件系统来说,...

关于C++文件读取问题,要实现的功能是,我输入文件路径和文件名,然后读取...
stream=fopen(p,"r"); \/\/打开file.txt(fopen中填“name”行不行?),不能填name,这就最好加入容错处理 fgets(buf,126,stream); \/\/把file.txt中的内容保存到数组buf中 for(int i=0;i<=126;i++)cout<<buf[i]; \/\/输出文件内容 _fcloseall();} 希望能帮到你 ...

C++ 用string读一个txt文件,文件的里的内容用tab,回车或者空格隔开...
如:内容一tab内容二空格内容三回车内容四,希望在读取的时候,只有tab和回车起到分割内容的作用,而把空格看做内容本身,不起作用。也就是希望file>>string的时候,能够获得内容一,内容二 内容三,内容四。怎么实现? 匿名 | 浏览1916 次 |举报 我有更好的答案...

c++中 如何将整个文本文件读到一个字符数组中 包括空格和换行符
exit (2);} \/\/ 把整个文件一个符号不漏地读入 buffer:result = fread (buffer,1,lSize,pFile);if (result != lSize) {fputs ("Reading error",stderr); exit (3);} \/* 整个文件 存放在 buffer 内存里. *\/ \/\/ 结束 fclose (pFile);free (buffer); \/\/释放内存 return 0;} ...

请问C++怎么读到行结束和文件结束?
c++中有定义常量EOF作为文件尾 ifstream ifs("1.txt");char ch;while ((ch=ifs.get()) && ch!=EOF)...至于行结束,你可以使用输入流的成员函数getline或者非成员函数getline(前者针对char*,后者针对string),在函数中可以用'\\n'作为行结束符 ...

c++怎么样 识别出汉字串中的标点符号
0xA13F~0xAA40 在utf-8中中文标点符号编码范围是0xEA84BF~0xEAA980 最好的办法是采用搜索字符串的方式来识别,因为汉字中的标点符号一般都是占用两个或者两个以上的字节(视编码而定)。示例如下,识别句号:char* pstr = strstr(str,"。");执行结果返回句号出现的首个位置 ...

C++ 怎么读文件
用户名 和密码之间以空格隔开 行与行之间以\\n隔开,假如TXT 是ANSI编码代码如下 (如果 是unicode编码,也就是宽字符。你的AB 数组 估计要用 WCHAR a[3][10];)for(int i =0 ;i <3 ;i++){ int j =0;while(true){ fread(&a[i][j] , 1 ,1 ,fp);if( a[i][j] == ‘...

C++ 从txt文件中读取的问题 ■这些特殊符号?
return -1;}char line[1024];string *data = new string[1024];int i = 0;while(i < 1024 && (fin>>line)){data[i] = line;data[i] += " ";i++;}\/\/输出来看一下int count = i;for (i = 0; i < count; i++){cout<<data[i].c_str()<<endl;}return 0;} ...

相似回答