版权声明:转载请注明出处,谢谢合作 https://blog.csdn.net/qq_40738840/article/details/85105978
1, 若在结构体中含有 string,使用动态申请内存时用new,不可用molloc
- string 是类(面对对象),实例化时需调用构造函数,而molloc无法调用构造函数,因此会造成内存冲突;而new则很好的解决了这个问题
2, string 的find函数是匹配字符串,空格也算一个字符
string s;
s.find(" q ",3); //表示从地址3开始寻找字符串 空格空格q空格
s.find("q",3); //表示从地址3开始寻找字符串 q
3,getline按行读文件在fstream,string中参数区别
char ch[80];
fstream inf(filename,ios::in);
inf.getline(ch,80);//fstream中的getline,不可用string类型,无法强制转换
string s;
//inf.getline(ch,s);错误示例
//从文件或是键盘读取一行的通式
getline(inf,s);//读取一行的通式,且可用string
getline(cin,s);//键盘输入
4,文件流变量无法作为参数传递
//错误实例
void CreateRandFile(fstream outFile)
{
}
fstream outFile("a.dat",ios::binary | ios::out);//无法作为函数参数
CreateRandFile(outFile);//立刻报错,因为与库中冲突
//其实完全没必要使用outFile做函数参数,因为outFile只是一把临时的钥匙,
//你随时随地都可以申请一把,所以在函数内部申请一把效果也是一样的
//可把文件看做一个全局存储数组,所以在任意位置均可打开它
5,文件流使用完及得关闭,反复读写需重定位读写指针
fstream file("a.txt",ios::in);//以只读、文本方式,打开文件
file.seekg(ios::beg);//读指针重定位,回到起始点
file.seekp(ios::beg);//写指针重定位,回到起始点
file.close();//关闭,下次再打开时读写指针均回到起点
6,字符与ASCII码转换
字符–》ASCII
char ch = '?';
int a;
a = ch;//自动转换
cout<<ch-'\0'//计算与第一个字符的差值
cout<<a;//这两种方式均可计算出字符的ASCII码
ASCII–》字符
char ch;
int a = 43;
ch = a;//自动转换
cout<<ch;
数字字符-》整型数字
char ch = '5';
int a;
a = ch -'0';//与字符0取差
7,哈夫曼解码时对于中英文输入有差别的字符只支持英文,中文一输入就报错,并输出‘?’
8 二进制文件读写不可用string
string s = {"2134"};
char ch[5] = {"2134"};
fstream inFile("a.txt",ios::in|ios::binary);
inFile.read((char*)&s,sizeof(s));//一定报错,string是动态内存管理
inFile.read((char*)ch,5*sizeof(char));//字符数组是可以的
9 字符数组末尾加 ‘\0’
不加的话无结束标记,输出都一样
10 文件末尾多读取一次解决办法
模板一致,都是在循环中添加一个读取是否成功判断,若失败,立即跳出循环
c语言读取
字符读取
FILE *fid = fopen("c文件读写.cpp","r");
if(fid == NULL)cout<<"file open fail!"<<endl;
//========字符读取==============
while(!feof(fid))
{
char ch = fgetc(fid);
cout<<ch;
}
按行读取
//===============按行读取=========================
/* 错误实例
while(!feof(fid))最后一个字符多读一次
{
char line[1024];
fgets(line,1023,fid);
cout<<line;
}
*/
while(true)成功
{
char line[1024];
fgets(line,1023,fid);
if(feof(fid))break;//判断
cout<<line;
}
c++读取
字符读取
扫描二维码关注公众号,回复:
4879740 查看本文章
fstream inFile("a.txt",ios::in);
char ch;
while(true)
{
inFile>>ch;
if(!inFile)break;
cout<<ch;
}
按行读取
string s;
while(true)
{
getline(inFile,s);
if(!inFile)break;
cout<<s;
}