File59. Дан символьный файл, содержащий по крайней мере один символ пробела. Удалить все его элементы, расположенные после последнего символа пробела, включая и этот пробел.
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
#include <iostream> #include <fstream> #include <cstring> using namespace std; int main() { char file_in_name[80], file_out_name[80]; cout << "File: "; cin>>file_in_name; sprintf(file_out_name,"%s%c",file_in_name,'~'); ifstream f_in(file_in_name,ios_base::binary|ios_base::in); std::streambuf * pbuf = f_in.rdbuf(); int i=0,space=0; while ( pbuf->sgetc() != EOF ) { ++i; char ch = pbuf->sbumpc(); if (ch==' ') space=i; std::cout << ch; } f_in.close(); f_in.open(file_in_name,ios_base::binary|ios_base::in); pbuf = f_in.rdbuf(); ofstream f_out(file_out_name,ios_base::binary|ios_base::out|ios_base::trunc); for(i=1; i<=space-1; ++i) { char ch = pbuf->sbumpc(); f_out<<ch; } f_in.close(); f_out.close(); remove (file_in_name); rename(file_out_name,file_in_name); return 0; } |
Другие задачи из раздела File можно посмотреть здесь.
Комментарии: