文件读写主要涉及到几个函数和 << >>操作符。
在这里进行简单的总结下:
首先说一下文件读写是分为ASCII 和二进制读写,由于我没用到二进制的读写,在这里主要总结下ASCII的读写。文件读写主要是想编译器的数据流中读入和从中读出数据。即fstream。对于一些理论和其中关联这里不再说明,主要说一下实例用法。
1. 首先说从文件中读取汉字,汉字和英文单词的不同是汉字是两个字符,所以如果读的话,就需要创建一个string的容器。把没两个char类型的字符放入一个字符串中然后再将该字符串放入容器中,则容器中的每个元素都是双字符的字符串(即一个汉字)。这样就涉及到怎么从一些有单词和汉字的文件中选出汉字的字符,经查汉字的两个字符都是负数,即判断字符小于0。如例子:
int _tmain(int argc, _TCHAR* argv[])
{
fstream file("d:\\file.txt");
if (!file)return 0;
char ch;
string str;
vector<string> vec;
while (!file.eof())
{
file.get(ch);
if (ch<0)
{
str.push_back(ch);
if (2 == str.size())
{
vec.push_back(str);
str.clear();
}
}
}
long int Number;
cout << "请输入一个数字:" <<endl;
cin >> Number;
int count = Number;
int index = 0;
int Number2 = 1;
while (count)
{
count = count/10;
index++;
}
cout << "转换中...." <<endl;
Sleep(500);
for (int j=0; j!=index; j++)
{
for (int i=0; i!=index-j-1; i++)
{
Number2 *= 10;
}
cout << vec[Number/Number2];
if (j != index-1)
{
cout << vec[8+index-j];
}
Number = Number%Number2;
Number2 = 1;
}
cout << endl;
cout << index << "位数" <<endl;
system("pause");
return 0;
}
“零o壹o贰afafo叁o肆o伍o陆o柒oafafaaafafaf捌o玖o拾o佰o仟o万o拾o佰o仟o亿” 文件中的内容。
2.get 函数和getline函数
char ch[100] = {};
char ch1;
inFile.get(ch,3); get的这个函数是向ch数组中读入字符,虽然写的是读入3个字符,但是实际读入的只有两个,系统会在ch末尾自动添加'\0'。另外该函数不读换行符,当读到'\n'是会阻塞,不能继续读取,此时需要使用一些函数如get(ch1)读取换行符或跳过该字符get()。
inFile.getline(吃,100)读取一段文字中的100个。如果该段文字大小小于100则,终止。如果一段文字大于100,则当读取到100时会中止,卡在这里不能继续读取;可以通过inFile.clear()函数清空输入流来使文件继续读取。
getline(inFile,str);向字符串中读入数据,没有换行符的限制,不必规定大小。每次读取一段,读取换行符。
3.<< >>操作符的使用
inFile>> str1 >> str2 >> str3;
>> 遇到空格会终止,即一行如果有三个用空格分开字符串可将该三个字符串分别放入str1、str2、str3中。