好久没发帖子了,今年准备考研就顺便记录一下学习记录吧。一直到今年考前一天。
使用C++,C 混合语法。C也快忘完了顺便复习、、 |
[C++] 纯文本查看 复制代码 #include <iostream>
#include <string>
#include <fstream>
using namespace std;
// 倒序
void headToTail(char buffer[],int size){
char* head = buffer,*tail = head+size-1;
char tmp;
while(head<tail){
tmp = *head;
*head = *tail;
*tail = tmp;
head++;
tail--;
}
}
// 整数转字符串
void itoStr(int number,char buffer[]){
int size = 0;
char* tmp = buffer;
while(number!=0){
*buffer++ = number%10+'0';
number/=10;
size++;
}
headToTail(tmp,size);
}
// 合并串
string merge(char c){
char str[4]={'0'};
itoStr(c,str);
string s("");
s.push_back(c);
s.push_back('(');
s.append(str);
s.push_back(')');
return s;
}
void p1(string content){
const char* cs = content.c_str();
while(*cs){
cout<<merge(*cs++);
}
}
// 读取文件内容
void readFileContentByAscii(string fileName,void(*func)(string)){//函数回调
string content; // string是没有\0
fstream fs;//fstream 提供in/out
fs.open(fileName,ios::in);//打开文件
//1. 判断文件是否为空时使用peek函数,若peek返回EOF则文件为空;
//2. 读取文件过程中,读取非char型时,使用peek判断文件尾将不再适用,循环判断条件应改用>>操作符进行读取,若读入char型缓冲区,peek函数会表现得很好。
while(fs.peek()!=EOF){ // 没想到C的 eof 多读一行在C++上也有。坑!
/*
按照一般思维,应该就是到达文件尾,就eof()应返回true,但事实上,在读完最后一个数据时,eofbit仍然是false。
只有当流再往下读取时,发现文件已经到结尾了,才会将标志eofbit修改为true。这也就是为什么使用while(!readfile.eof())会出多现读一行的原因。
既然已经知道了原因,那么,为了避免这样的情况,可以使用readfile.peek()!=EOF来判断是否到达文件结尾,这样就能避免多读一行。
*/
char c = fs.get();//读取单个字符
content.push_back(c);
}
func(content);//输出
}
/*1.编写程序,输入一个文本文件名,输出该文本文件中的每一个字符及其所对应的ASCII码。
例如文件的内容是Beijing,则输出:B(66)e(101)i(105)j(106)i(105)n(110)g(103)。*/
int main(){
readFileContentByAscii("E:\\Users\\Administrator\\Documents\\Visual Studio 2010\\Projects\\ce\\ce\\test.txt",p1);
return 0;
}
|